推广

R绘图(6): 拯救初学者——发表级绘图全能包ggpubr

iseeyu2年前 (2024-02-21)推广111

install.packages("ggpubr")
library(ggpubr)

1. 单变量——连续型

1.1 密度图
#创建数据框
set.seed(0330)
mydata = data.frame(
  group = rep(c("A", "B","C","D"), each=200),
  value = c(rnorm(200, mean = 2), rnorm(200, 6),rnorm(200,2,4),rnorm(200,6,4))
)

ggdensity(mydata, x = "value", y="..density..", #或者"..count..",默认为"..density.."
          fill = "lightgray",
          add = "mean", #或者"median",
          rug = TRUE #在图形下方添加密度线
          )
ggsave("density1.pdf",width = 10,height = 10,units = "cm")

分组绘制

ggdensity(mydata, x = "value",
          color = "group", fill="group", #分组
          palette = "Dark2",#或者"aaas"这种ggsci包的配色形式,或者"#00AFBB"这种编码形式
          add = "mean",
          rug = TRUE,
          alpha=0.2, #调整透明度
          xlab=F,ylab = "Density",
          facet.by="group", #分面
          panel.labs=list(group = c("1", "2", "3", "4")), #修改每个panel的名字
          title="density plot",
          ggtheme=theme_bw() #可以是ggplot2中的主题类型
)
ggsave("density2.pdf",width = 13,height = 12,units = "cm")

1.2 密度图叠加正态分布
set.seed(0330)
mydata = data.frame(
  group = rep(c("A", "B"), each=200),
  value = c(rnorm(200, 2), rnorm(200, 6, 4))
)

ggdensity(mydata, x = "value", fill = "red") +
  stat_overlay_normal_density(color = "red", linetype = "dashed")+
  scale_x_continuous(limits = c(-5,20))
ggsave("density3.pdf",width = 10,height = 10,units = "cm")

分组绘制

ggdensity(mydata, x = "value", fill = "group") +
  stat_overlay_normal_density(aes(color=group), linetype = "dashed")+
  scale_x_continuous(limits = c(-5,20))
ggsave("density4.pdf",width = 10,height = 10,units = "cm")

分组+分面

ggdensity(mydata, x = "value", fill = "group", facet.by = "group") +
  stat_overlay_normal_density(aes(color=group), linetype = "dashed")+
  scale_x_continuous(limits = c(-5,20))
ggsave("density5.pdf",width = 16,height = 10,units = "cm")

1.3 直方图
gghistogram(mydata, x = "value", fill = "lightgray",
            add = "mean", rug = TRUE)
ggsave("hist1.pdf",width = 10,height = 10,units = "cm")

分组绘制

gghistogram(mydata, x = "value", fill = "group",
            add = "mean", rug = TRUE,
            palette = c("#00AFBB", "#E7B800"))
ggsave("hist2.pdf",width = 10,height = 10,units = "cm")

添加核密度图

gghistogram(mydata, x = "value", fill = "group",
            rug = TRUE,
            palette = c("#00AFBB", "#E7B800"),
            add_density = TRUE)
ggsave("hist3.pdf",width = 10,height = 10,units = "cm")

2. 双变量——x离散,y连续

2.1 箱型图
library(patchwork)
set.seed(0330)
mydata = data.frame(
  group = rep(c("A", "B"), each=100),
  group2 = rep(c("g1","g2","g1","g2"),each=50),
  value = c(rnorm(100, 2), rnorm(100, 6, 4))
)

#下面的加号表示拼接图形
ggboxplot(mydata, x = "group", y = "value", width = 0.8)+
ggboxplot(mydata, x = "group", y = "value", width = 0.8, orientation = "horizontal")+
ggboxplot(mydata, x = "group", y = "value", width = 0.8, notch = TRUE,order = c("B","A"))+
ggboxplot(mydata, x = "group", y = "value", width = 0.8, select = c("A"))
ggsave("box1.pdf",width = 10,height = 10,units = "cm")

orientation调整图形方向;notch添加缺口;order调整顺序;select选择特定的水平来画图

ggboxplot(mydata, x = "group", y = "value", width = 0.8, add = "jitter",add.params=list(color = "lightblue",size=1, shape = 17))+
ggboxplot(mydata, x = "group", y = "value", width = 0.8, add = "dotplot",add.params=list(color = "lightblue",size=0.5))
ggsave("box2.pdf",width = 16,height = 10,units = "cm")

上面的add添加额外图形
add.params对附加图形的参数进行调整,shape表示点的形状,可以参加下图

内部分组

ggboxplot(mydata, x = "group", y = "value", width = 0.6, color = "black",fill="group2",palette = c("#00AFBB", "#E7B800"),
          xlab = F, #不显示x轴的label
          bxp.errorbar=T,bxp.errorbar.width=0.4, #添加errorbar
          size=1, #箱型图边线的粗细
          outlier.shape=NA, #不显示outlier
          legend = "right") #图例放右边
ggsave("box3.pdf",width = 10,height = 10,units = "cm")

2.1.1 箱型图添加配对连线

可以接受两种数据

mydata2=mydata
mydata2$group2=NULL
head(mydata2)
# group    value
# 1     A 3.551687
# 2     A 3.664068
# 3     A 2.194454
# 4     A 2.569605
# 5     A 2.579997
# 6     A 1.837967
ggpaired(mydata2, x = "group", y = "value",
         color = "group", line.color = "gray", line.size = 0.4,
         palette = "npg")
                 
mydata2$id=rep(1:100,2)
mydata2=mydata2%>%reshape2::dcast(id~group)
head(mydata2)
# id        A         B
# 1  1 3.551687  4.720074
# 2  2 3.664068  7.821049
# 3  3 2.194454  8.956841
# 4  4 2.569605 -4.450063
# 5  5 2.579997  7.568216
# 6  6 1.837967  5.133688
ggpaired(mydata2, cond1 = "A", cond2 = "B",
         color = "condition", line.color = "gray", line.size = 0.4,
         palette = "npg")
ggsave("box4.pdf",width = 10,height = 10,units = "cm")

上面两种数据框得到的图是一模一样的

2.1.2 添加p值

一般用法

ggboxplot(mydata, x = "group", y = "value", width = 0.8, 
          add = "dotplot",add.params=list(color = "lightblue",size=0.5))+
  stat_compare_means(method = "t.test")
ggsave("box5.pdf",width = 10,height = 10,units = "cm")

成对数据

ggpaired(mydata2, cond1 = "A", cond2 = "B",
         color = "condition", line.color = "gray", line.size = 0.4,
         palette = "npg")+
  stat_compare_means(paired = TRUE)
ggsave("box6.pdf",width = 10,height = 10,units = "cm")

多于两个组时,定义想检验的配对

my_comparisons <- list( c("0.5", "1"), c("1", "2"), c("0.5", "2") )
ggboxplot(ToothGrowth, x = "dose", y = "len",
          color = "dose", palette = "npg")+
  #两两比较的p值
  stat_compare_means(comparisons = my_comparisons, label.y = c(29, 35, 40))+
  #整体的p值
  stat_compare_means(label.y = 45)
ggsave("box7.pdf",width = 10,height = 10,units = "cm")

固定某一组,其他组与其比较

ggboxplot(ToothGrowth, x = "dose", y = "len",
          color = "dose", palette = "npg")+
  # 整体的p值
  stat_compare_means(method = "anova", label.y = 40)+ 
  #label中用点表示显著性
  stat_compare_means(aes(label = ..p.signif..),
                     method = "t.test", ref.group = "0.5")
ggsave("box8.pdf",width = 10,height = 10,units = "cm")

分组/分面之后再做比较

ggboxplot(ToothGrowth, x = "supp", y = "len",
          color = "supp", palette = "npg",
          add = "jitter",
          facet.by = "dose")+
  #label中去掉检验方法
  stat_compare_means(aes(label = paste0("p = ", ..p.format..)))
ggsave("box9.pdf",width = 10,height = 10,units = "cm")

2.2 小提琴图

整体上参数选项和箱型图差不多

ggviolin(mydata, x = "group", y = "value", fill = "group",
         palette = c("#00AFBB", "#E7B800"),
         add = "boxplot", add.params = list(fill = "white"))+
ggviolin(mydata, x = "group", y = "value", color = "group2", #内部分组
         palette = c("#00AFBB", "#E7B800"), 
         add = "boxplot")
ggsave("violin1.pdf",width = 16,height = 10,units = "cm")

2.3 柱形图
2.3.1 数据已经统计好
df1 <- data.frame(group=c("A", "B", "C"),
                 len=c(6, 10, 14))
ggbarplot(df1, "group", "len",
          fill = "group", color = "group",
          palette = c("#00AFBB", "#E7B800", "#FC4E07"),
          label = TRUE, lab.pos = "in", lab.col = "white")
ggsave("bar1.pdf",width = 10,height = 10,units = "cm")

2.3.2 数据没有统计好

(需要函数帮你计算,比如组内求和,一般反映在纵坐标上,这是函数帮你算的)

df2 <- data.frame(group=rep(c("A", "B", "C"),2),
                  group2=rep(c("1", "2"), each=3),
                  len=c(6, 15, 3, 4, 10, 5))
# group group2 len
# 1     A      1   6
# 2     B      1  15
# 3     C      1   3
# 4     A      2   4
# 5     B      2  10
# 6     C      2   5
ggbarplot(df2, "group", "len",
          fill = "group2", color = "group2", palette = "Paired",
          label = TRUE, lab.col = "white", lab.pos = "in")+
ggbarplot(df2, "group", "len",
          fill = "group2", color = "group2", palette = "Paired",
          label = TRUE,
          position = position_dodge(0.9)) #范围0-1,表示柱子之间的错开程度
ggsave("bar2.pdf",width = 16,height = 10,units = "cm")

2.3.3 添加误差棒
df3 <- mydata
#这时累加
ggbarplot(df3, x = "group", y = "value")+
#这时求均值
ggbarplot(df3, x = "group", y = "value",
          add = "mean")+
#添加误差棒,error.plot选择展示形式,默认上下都展示
ggbarplot(df3, x = "group", y = "value",
          add = "mean_se",
          error.plot = "upper_errorbar")+
#内部分组
ggbarplot(df3, x = "group", y = "value", color = "group2", 
          add = "mean_se", palette = c("#00AFBB", "#E7B800"),
          position = position_dodge())
ggsave("bar3.pdf",width = 16,height = 16,units = "cm")

2.4 连线图
#数据计算好,可以直接用
ggline(df1, x = "group", y = "len")+
#内部分组,点线的形状和颜色均不同
ggline(df2, x = "group", y = "len", 
       linetype = "group2", shape = "group2",#点的形状
       color = "group2", palette = c("#00AFBB", "#E7B800"))+
#添加点和误差棒
ggline(df3, x = "group", y = "value",
       add = c("mean_se","dotplot"),add.params = list(size=0.5),
       color = "steelblue")+
#内部分组,线的颜色不一样
ggline(df3, x = "group", y = "value", color = "group2",
       add = "mean_se", palette = c("#00AFBB", "#E7B800"))
ggsave("line1.pdf",width = 16,height = 16,units = "cm")

2.5 饼图
df1$ratio=paste(df1$group,"(",round(df1$len / sum(df1$len),3) * 100,"%)",sep = "")
ggpie(df1, "len", label = "ratio",
      fill = "group", color = "white",
      palette = c("#00AFBB", "#E7B800", "#FC4E07"))+
ggpie(df1, "len", label = "ratio",
      lab.pos = "in", lab.font = "white",
      fill = "group", color = "white",
      palette = c("#00AFBB", "#E7B800", "#FC4E07"))
ggsave("pie1.pdf",width = 16,height = 10,units = "cm")

label添加文本注释;
color是扇形的边线,lab.pos调整文本的位置,lab.font调整文本字体颜色

2.6 圆环图
ggdonutchart(df1, "len", label = "ratio",
             lab.pos = "in", lab.font = "white",
             fill = "group", color = "white",
             palette = c("#00AFBB", "#E7B800", "#FC4E07"))
ggsave("donut1.pdf",width = 10,height = 10,units = "cm")

2.7 克利夫兰点图
ggdotchart(df2, x = "group", y = "len",
           color = "group2", size = 3,
           add = "segment",
           add.params = list(color = "lightgray", size = 1.5),
           position = position_dodge(0.5),
           palette = "jco",
           ggtheme = theme_pubclean())
ggsave("Clevelands_Dot1.pdf",width = 10,height = 10,units = "cm")

3. 双变量——x, y都连续

3.1 散点图添加回归线,相关系数
df4=mtcars
df4$cyl=as.factor(df4$cyl)
ggscatter(df4, x = "wt", y = "mpg",
          color = "black", size = 3, # 点的颜色,大小
          add = "reg.line",  # 添加回归线
          add.params = list(color = "blue", fill = "lightgray"), # 回归线的调整
          conf.int = TRUE, # 回归线的置信区间
          cor.coef = TRUE, # 添加相关系数
          cor.coeff.args = list(method = "pearson", label.x = 3, label.sep = "\n")#相关系数的调整
)
3.2 分组计算相关系数
ggscatter(df4, x = "wt", y = "mpg",
          color = "cyl", palette = "jco",
          add = "reg.line", conf.int = TRUE)+
  stat_cor(aes(color = cyl), label.x = 3)
3.3 局部回归
ggscatter(df4, x = "wt", y = "mpg",
          add = "loess", conf.int = TRUE)

3.4 添加分组椭圆,均值点,以及辐射线
ggscatter(df4, x = "wt", y = "mpg",
          color = "cyl", shape = "cyl",
          palette = c("#00AFBB", "#E7B800", "#FC4E07"),
          ellipse = TRUE, mean.point = TRUE,
          star.plot = TRUE)
3.5 添加文本注释
df4$name <- rownames(df4)
ggscatter(df4, x = "wt", y = "mpg",
          color = "cyl", palette = c("#00AFBB", "#E7B800", "#FC4E07"),
          label = "name", repel = TRUE)+plot_layout(widths = c(1,2))

3.6 散点图边缘添加密度图/箱型图
ggscatterhist(
  iris, x = "Sepal.Length", y = "Sepal.Width",
  color = "Species", size = 3, alpha = 0.6,
  palette = c("#00AFBB", "#E7B800", "#FC4E07"),
  margin.params = list(fill = "Species", color = "black", size = 0.2)
)

ggscatterhist(
  iris, x = "Sepal.Length", y = "Sepal.Width",
  color = "Species", size = 3, alpha = 0.6,
  palette = c("#00AFBB", "#E7B800", "#FC4E07"),
  margin.plot = "boxplot",
  ggtheme = theme_bw()
)


感谢你能读到这里,有任何疑欢迎后台留言。

因水平有限,有错误的地方,欢迎批评指正!

扫描二维码推送至手机访问。

版权声明:本文由西安泽虎代运营发布,如需转载请注明出处。

转载请注明出处https://www.0291.com.cn/post/57118.html

相关文章

网站排名是不能靠网站标题来决定的。

网站排名是不能靠网站标题来决定的。

当优化人员给客户优化网站时,都会按客户的要求把对方要求的关键字排列一下,就直接排上网站的标题上面了。有很多企业网站都是同样的做法,都是一般的企业站,没有多少文章系统,一个企业站如果没有充足、丰富的内容,只想靠在网站标题上写上关键字就能获得好的排名,我想一般只有一种情况,这种情况是关键字一般就是公司的...

淘宝商标怎么注册,淘宝店铺怎么注册品牌(淘宝店铺可以申请注册商标吗)

淘宝商标怎么注册,淘宝店铺怎么注册品牌(淘宝店铺可以申请注册商标吗)

首先给自己的商标取一个好记又有意义的名字,然后去查询下有没有被别人注册。如果没有,再准备好相关的资料,选择自己的类别,去相关部门申请注册,一般需要几个月才有结果。...

教你传统企业怎么做好软文营销推广。

教你传统企业怎么做好软文营销推广。

如今,是互联网的时代,也是网络营销的时代。网络营销中的营销性价比比较高,方便快捷,以较低的成本为多个企业产品推广创造了市场营销奇迹。可能有的人会问企业与别的企业不一样,那传统企业需不需要做软文营销?怎么做才好?下面由云裂变小编为大家分享一下。 其实,只要你企业的产品能够在网络上销售,那么...

App Store榜单频变化 被恶意刷榜还是苹果算法出问题

App Store榜单频变化 被恶意刷榜还是苹果算法出问题

App Store虽然每时每刻都在更新,但是基本上不会有太大的变动。但昨日即12月3日下午App Store免费榜榜单却发生了频繁变动,甚至有部分许久未曾更新的App在排行榜上的排名每个小时都在发生变化,而且相关关键字也被锁版。 对此,此次App Store免费榜变化较大的App开发者向...

淘宝活动水印怎么还原(淘宝图片去水印)

淘宝活动水印怎么还原(淘宝图片去水印)

首先登录到淘宝商家账号,如何进入到【千牛卖家中心】-【图片空间】-【更多设置】-【水印设置】当中,之后选择相应的图片水印或文字水印。...

淘宝店铺注销流程是怎样的,店铺注销流程(淘宝店铺能注销重开吗)

淘宝店铺注销流程是怎样的,店铺注销流程(淘宝店铺能注销重开吗)

先打开淘宝网,登录自己的账号和密码,进入到淘宝卖家中心,再点击服务中心,注销前要将所有产品下架,进入到服务中心上甲板,有一个账户赚钱,点击选择注销账户就行了。...

现在,非常期待与您的又一次邂逅

我们努力让每一部企业宣传片和抖音短视频成为商业大片