该内容已被发布者删除 该内容被自由微信恢复
文章于 2024年4月4日 被检测为删除。
查看原文
被用户删除
其他

R语言绘图 | 使用ggplot2绘制发散型柱状图

小陈的R语言笔记 小陈的R语言笔記 2024-04-04

发散型柱状图

发散型柱状图(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()) #移除水平网格

大家有兴趣可以加群,可以在群里讨论,学习,共同进步!


继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存