按“填充”变量ggplot中的值排序 - 条形图R

Posted

技术标签:

【中文标题】按“填充”变量ggplot中的值排序 - 条形图R【英文标题】:Order by a value within a "fill" variable ggplot - Bar Chart R 【发布时间】:2022-01-17 20:50:16 【问题描述】:

我有以下数据集:

数据:

test <- data.frame(
cluster   = c("1", "2", "3","1", "2", "3","1", "2", "3",), 
variable   = c("age", "age", "age", "speed", "speed", "speed", "price","price","price",),
value = c(0.33,0.12,0.98,0.77,0.7,0.6,0.11,0.04,0.15))

test$variable <- factor(test$variable, levels = c("age","speed","price"))

代码

test %>%
  ggplot(aes(x = cluster, y = value ,fill = variable ,group = (cluster))) +
  geom_col(position = "stack", color = "black", alpha = .75) +
  coord_flip()

我尝试通过变量中的值对条形图进行排序,例如“年龄”。这是我用来可视化图表的代码,我已经尝试了排序函数,但这似乎在“填充”参数。

认为问题在于,“年龄”本身只是“变量”的一个值。

应该是这样的:

是否可以使用 ggplot 显示类似的内容,还是我需要另一个包?

【问题讨论】:

请使用dput()而不是图片来发布您的数据。 这能回答你的问题吗? Fixing the order of facets in ggplot 我已经链接到关于在 ggplot 中订购酒吧的常见问题解答。如果您需要更多帮助,请编辑您的问题,以复制/粘贴文本而不是图片的形式分享您的代码和示例数据。 【参考方案1】:

您调整了variablelevel 顺序,这将影响每个条形中填充颜色的顺序。要更改映射x = cluster 的轴的顺序,我们需要调整cluster 的级别顺序。作为一次性的,您可以手动执行此操作。响应式地完成它需要更多的工作:

手动:

test$cluster = factor(test$cluster, levels = c(2, 1, 3))

计算正确的顺序:

library(dplyr)
level_order = test %>%
  filter(variable == "age") %>%
  group_by(cluster) %>%
  summarize(val = sum(value), .groups = "drop") %>%
  arrange(val) %>% 
  pull(cluster)

test = mutate(test, cluster = factor(cluster, levels = level_order))

【讨论】:

太棒了,效果很好!非常感谢。

以上是关于按“填充”变量ggplot中的值排序 - 条形图R的主要内容,如果未能解决你的问题,请参考以下文章

R语言ggplot2可视化条形图(bar plot)配置因子变量的全局填充色方案这样不同数据集相同因子的填充色具有一致性(Fix colors to factor levels)

为多个变量制作堆积条形图 - R 中的 ggplot2

在R中的单个图上绘制两个变量的条形图和第三个变量的线图

R语言ggplot2可视化改变柱状图(条形图)的填充色实战:默认的颜色为灰色改变柱状图(条形图)的填充色设置每个柱子(条形)使用不同的色彩

仅使用一个变量(无值或排名)对 ggplot2 条形图中的条形重新排序?

使用 ggplot2 和 R 创建帕累托图