该内容已被发布者删除 该内容被自由微信恢复。
文章于 2024年4月4日 被检测为删除。
被用户删除
其他
R语言绘图 | 使用ggplot2绘制发散型柱状图
发散型柱状图
发散型柱状图(Diverging Bar Chart)是一种用于可视化数据集中两个不同方向上的变化趋势的图表类型。这种图表通常用于比较两个相对立的数据集,突出它们之间的差异和趋势。发散型柱状图通常具有中心基准线,两侧的柱状表示两个相对立的数据。
在发散型柱状图中,每个柱状条代表一个数据点,其长度表示相应数据的数值大小。基准线上方的柱状条代表正值,基准线下方的柱状条代表负值。通过颜色、长度或其他视觉元素,可以更清晰地展示两个数据集之间的对比情况。
这种图表常用于展示相对于某个基准值的变化,例如正负盈亏、正负增长等。通过发散型柱状图,人们可以直观地看到两个数据集的相对大小和趋势。
准备
#安装和加载r包
install.packages("ggplot2")
library(ggplot2)
#随机生成的数据,无实际意义
set.seed(6)
df <- data.frame(group = LETTERS[1:20],
value = rnorm(20))
绘图
基础柱状图
ggplot(df, aes(x = group, y = value)) +
geom_bar(stat = "identity",#直接使用数据中的值,而不进行统计变换
show.legend = FALSE) + #删除图例
xlab("Group") +
ylab("Value")
排列后柱状图
ggplot(df, aes(x = reorder(group, value), y = value)) +
geom_bar(stat = "identity",
show.legend = FALSE) +
xlab("Group") +
ylab("Value")
坐标轴转换
ggplot(df, aes(x = reorder(group, value), y = value)) +
geom_bar(stat = "identity",
show.legend = FALSE) +
xlab("Group") +
ylab("Value") +
coord_flip()
备注文字或数据
ggplot(df, aes(x = reorder(group, value), y = value)) +
geom_bar(stat = "identity",
show.legend = FALSE) +
geom_text(aes(label = round(value, 1),
angle = 90,
hjust = ifelse(value < 0, 1.25, -0.25),
vjust = 0.5),
size = 3) +
xlab("Group") +
ylab("Value") +
scale_y_continuous(limits = c(min(df$value) - 0.2,
max(df$value) + 0.2))
ggplot(df, aes(x = reorder(group, value), y = value)) +
geom_bar(stat = "identity",
show.legend = FALSE) +
geom_text(aes(label = round(value, 1),
hjust = 0.5,
vjust = ifelse(value < 0, 1.5, -1)),
size = 2.5) +
xlab("Group") +
ylab("Value") +
scale_y_continuous(limits = c(min(df$value) - 0.2,
max(df$value) + 0.2))
ggplot(df, aes(x = reorder(group, value), y = value)) +
geom_bar(stat = "identity",
show.legend = FALSE) +
geom_text(aes(label = round(value, 1),
hjust = ifelse(value < 0, 1.5, -1),
vjust = 0.5),
size = 3) +
xlab("Group") +
ylab("Value") +
coord_flip() +
scale_y_continuous(breaks= seq(-2, 2, by = 1),
limits = c(min(df$value) - 0.5,
max(df$value) + 0.5))
基于值的颜色
color <- ifelse(df$value < 0, "pink", "lightblue")
ggplot(df, aes(x = reorder(group, value), y = value)) +
geom_bar(stat = "identity",
show.legend = FALSE,
fill = color,
color = "white") +
xlab("Group") +
ylab("Value")
ggplot(df, aes(x = reorder(group, value), y = value)) +
geom_bar(stat = "identity",
show.legend = FALSE,
aes(fill = value),
color = "gray30") +
xlab("Group") +
ylab("Value") +
scale_fill_gradient2(low = "#F4A460",
mid = "aliceblue",
high = "#6495ED")
调整主题细节
ggplot(df, aes(x = reorder(group, value), y = value)) +
geom_bar(stat = "identity",
show.legend = FALSE,
fill = color,
color = "white") +
geom_hline(yintercept = 0, color = 1, lwd = 0.2) +
geom_text(aes(label = group, #分组文本
hjust = ifelse(value < 0, 1.5, -1),
vjust = 0.5), size = 2.5) +
xlab("Group") +
ylab("Value") +
scale_y_continuous(breaks = seq(-2, 2, by = 1),
limits = c(-2.5, 2.5)) +
coord_flip() +
theme_minimal() +
theme(axis.text.y = element_blank(), #删除 Y 轴文本
axis.ticks.y = element_blank(), #删除 Y 轴刻度线
panel.grid.major.y = element_blank()) #移除水平网格
大家有兴趣可以加群,可以在群里讨论,学习,共同进步!