【问题标题】:Order by a value within a "fill" variable ggplot - Bar Chart R按“填充”变量ggplot中的值排序 - 条形图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 中订购酒吧的常见问题解答。如果您需要更多帮助,请编辑您的问题,以复制/粘贴文本而不是图片的形式分享您的代码和示例数据。

标签: r ggplot2 charts


【解决方案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))

【讨论】:

  • 太棒了,效果很好!非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-04
  • 1970-01-01
  • 1970-01-01
  • 2014-11-22
  • 1970-01-01
  • 1970-01-01
  • 2017-09-09
相关资源
最近更新 更多