根据ggplot中的两个条件对条形图进行排序
Posted
技术标签:
【中文标题】根据ggplot中的两个条件对条形图进行排序【英文标题】:Sort a bar plot based on two conditions in ggplot 【发布时间】:2021-09-03 03:41:20 【问题描述】:我想创建一个条形图,按 组 排列,并在这些组内按 *最小值到最大值 值排序。
为了重新创建示例,我将使用以下数据框
df <- data.frame(
stringsAsFactors = FALSE,
Sites = c("Site 1","Site 2","Site 3",
"Site 4","Site 5","Site 6","Site 7","Site 8","Site 9",
"Site 10","Site 11"),
Values = c(184.7955548,171.1466314,
245.5952181,188.3072784,259.9438698,210.3448318,
173.7977541,182.5497301,198.7985429,188.0458496,215.5709303),
Groups = c(1, 1, 3, 3, 2, 3, 1, 3, 3, 2, 2))
对于我使用的情节:
df %>% arrange(Groups, Values) %>%
mutate(name=factor(Groups, levels = Values)) %>%
ggplot(aes(x = df$Sites, y = df$Values))+
geom_bar(stat = "identity", fill = df$Groups)+
scale_color_manual(values = c ('royalblue1', 'slategrey2', 'yellow1'))+
ylab("Values")+
xlab("")+
theme(axis.text.x = element_text(angle = 90, hjust = 1))
导致:
但我期待的是以下内容:
任何帮助将不胜感激
【问题讨论】:
【参考方案1】:代码中的几个问题 -
name=factor(Groups, levels = Values)
提供所有 NA
的。 levels
应该是数据中存在的值。
在ggplot
代码中我们不需要$
。 df$Sites
也没有我们需要的因子水平。因子水平被添加到管道数据中,而不是原始数据中。
library(dplyr)
library(ggplot2)
df %>%
arrange(Groups, Values) %>%
mutate(Sites=factor(Sites, levels = Sites),
Groups = factor(Groups)) %>%
ggplot(aes(x = Sites, y = Values, fill = Groups)) +
geom_bar(stat = "identity")+
scale_fill_manual(values = c ('royalblue1', 'grey2', 'yellow1'))+
ylab("Values")+
xlab("")+
theme(axis.text.x = element_text(angle = 90, hjust = 1))
【讨论】:
对不起,我没有注意到。我们需要使用scale_fill_manual
。更新了答案。以上是关于根据ggplot中的两个条件对条形图进行排序的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 R ggplot 按值对条形图进行排序? [复制]