library(ggplot2)
library(ggpubr)
1.简单条形图
df <- data.frame(dose=c("D0.5", "D1", "D2"),
len=c(4.2, 10, 29.5))
ggbarplot(df,x = 'dose',y = 'len',
color = 'black',
fill = 'gray')

ggbarplot(df,x = 'dose',y = 'len',
color = 'black',
fill = 'gray',
rotate = T)

ggbarplot(df,x = 'dose',y = 'len',
color = 'black',
fill = 'gray',
label = T)

ggbarplot(df, x = "dose", y = "len",
color = "dose",
fill = "dose",
palette = "jco")

2.簇状条形图
df2 <- data.frame(supp=rep(c("VC", "OJ"), each=3),
dose=rep(c("D0.5", "D1", "D2"),2),
len=c(6.8, 15, 33, 4.2, 10, 29.5))
ggbarplot(df2, x = "dose", y = "len",
fill = "supp",
color = "supp",
palette = c("gray", "black"),
position = position_dodge(0.9))

- 改变条形图轮廓和填充色,按填充色生成图例,添加标签
ggbarplot(df2, x = "dose", y = "len",
color = "supp", # 分组调整轮廓颜色
fill = "supp", # 分组调整填充颜色
palette = 'jco', # jco杂志配色
position = position_dodge(0.9), # 调整条形间距
label = TRUE, # 添加标签
lab.col = "black",lab.pos = "out") # 修改标签参数,颜色、位置

3.堆积条形图
ggbarplot(df2, x = "dose", y = "len",
color = "supp", # 分组调整轮廓颜色
fill = "supp", # 分组调整填充颜色
palette = 'jco', # jco杂志配色
label = TRUE, # 添加标签
lab.col = "white",lab.pos = "in") # 修改标签参数,颜色、位置

library(gcookbook)
library(plyr)
df3 = ddply(df2,'dose', # 按照'dose'变量分组
transform, #将每组条形对应的数据转化为100%格式
percent = round(len/sum(len) * 100)) # 转换公式,将转换后的数据添加到新的1列
ggbarplot(df3, x = "dose", y = "percent",
color = "supp", # 分组调整轮廓颜色
fill = "supp", # 分组调整填充颜色
palette = 'jco', # jco杂志配色
label = TRUE, # 添加标签
lab.col = "white",lab.pos = "in") # 修改标签参数,颜色、位置

4.有序条形图
dfm = mtcars
dfm$cyl = as.factor(dfm$cyl)
dfm$name = rownames(dfm)
ggbarplot(dfm, x = "name", y = "mpg",
fill = "cyl", # 分组调整填充颜色
color = "white", # 轮廓颜色为白色
palette = "jco", # jco杂志配色
sort.val = "asc", # 按降序对值进行排序
sort.by.groups = F, # 不在组内进行排序
x.text.angle = 90 , # 旋转垂直x轴文本
)

ggbarplot(dfm, x = "name", y = "mpg",
fill = "cyl", # 分组调整填充颜色
color = "white", # 轮廓颜色为白色
palette = "jco", # jco杂志配色
sort.val = "asc", # 按升序对值进行排序
sort.by.groups = T, # 组内进行排序
x.text.angle = 90 # 旋转垂直x轴文本
)

dfm$mpg_z <- scale(dfm$mpg)
dfm$mpg_grp <- factor(ifelse(dfm$mpg_z < 0, "low", "high"),
levels = c("low", "high"))
ggbarplot(dfm, x = "name", y = "mpg_z",
fill = "mpg_grp", # 分组调整填充颜色
color = "white", # 轮廓颜色为白色
palette = "jco", # jco杂志配色
sort.val = "asc", # 按升序对值进行排序
sort.by.groups = F, # 组内不排序
x.text.angle = 90, # 旋转垂直x轴文本
ylab = "MPG z-score", # y轴标签
xlab = F, # 去除x轴标签
legend.title = "MPG Group" # 添加图例标签
)

ggbarplot(dfm, x = "name", y = "mpg_z",
fill = "mpg_grp", # 分组调整填充颜色
color = "white", # 轮廓颜色为白色
palette = "jco", # jco杂志配色
sort.val = "desc", # 按降序对值进行排序
sort.by.groups = F, # 组内不排序
x.text.angle = 90, # 旋转垂直x轴文本
ylab = "MPG z-score", # 添加y轴标签
legend.title = "MPG Group", # 添加图例标签
rotate = T, # 旋转坐标轴
ggtheme = theme_minimal(), # ggplot2主题
) + theme(axis.text.x = element_text(angle = 0, hjust = 0.5, vjust = 1))

5.棒棒糖图
- 当有大量值可视化时,棒棒糖图表是条形图的替代方案
- 基本图形
ggdotchart(dfm, x = "name", y = "mpg",
color = "cyl", # 按组着色
palette = c("#00AFBB", "#E7B800", "#FC4E07"), # 自定义颜色
sorting = "ascending", # 升序
add = "segments", # 将y = 0的线段添加到点
add.params = list(color = "cyl", size = 1), # 调整线段参数,颜色、大小
ggtheme = theme_pubr()
)

ggdotchart(dfm, x = "name", y = "mpg",
color = "cyl", # 按组着色
palette = c("#00AFBB", "#E7B800", "#FC4E07"), # 自定义颜色
sorting = "descending", # 降序
add = "segments", # 将y = 0的线段添加到点
add.params = list(color = "cyl", size = 1), # 调整线段参数,颜色、大小
rotate = T, # 旋转坐标轴
group = "cyl", # 组内排序
dot.size = 6, # 点的大小
label = round(dfm$mpg), # 将mpg值添加为点标签
font.label = list(color = "white", # 调整标签参数,颜色、大小、位置
size = 9,
vjust = 0.5),
ggtheme = theme_pubr() # ggplot2 主题
)
