微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在ggplot2中按填充颜色将条形分组,同时保持降序排列?

如何解决如何在ggplot2中按填充颜色将条形分组,同时保持降序排列?

我目前正在处理一个从timeA和timeB收集数据的条形图。我对不同的物体进行了测量(例如:质量)。测量的对象在timeA组和timeB组中不一致。

  1. 我希望条形降序
  2. 但是我也希望将条形按照时间(即aka fill = time)分组

我将如何实现?

数据集示例:

df$measures <- c(2,4,26,10,18,20,14,22,12,16,24,6,8,28)
df$object <- seq.int(nrow(df)) 
df$time<- "timea"
df[6:14,3] = "time"

到目前为止,这大概是我的图形代码

plot <-ggplot(df,aes(x=reorder(object,-measures),y=measures,fill=time))+
  geom_bar(stat="identity") +
  theme_minimal()+
  theme(axis.text.x = element_text(angle = 45,hjust = 1),plot.title = element_text(hjust = 0.5))+ 
  scale_fill_manual(name="Legend",values = c("firebrick","cornflowerblue"),labels=c("timea","timeb")) 
plot

我附上了一张图片,以防万一图形大致是什么样。理想情况下,我希望一侧的所有蓝色条以降序排列,而另一侧的所有红色条以降序排列;都在同一个情节中。

enter image description here

解决方法

如果您希望所有内容都在同一张图中,则可以在数据框中使用因子水平。

library(dplyr)
library(ggplot2)

df %>%
  arrange(time,desc(measures)) %>%
  mutate(object = factor(object,object)) %>%
  ggplot() + aes(x=object,y=measures,fill=time)+
  geom_bar(stat="identity") +
  theme_minimal()+
  theme(axis.text.x = element_text(angle = 45,hjust = 1),plot.title = element_text(hjust = 0.5))+ 
  scale_fill_manual(name="Legend",values = c("firebrick","cornflowerblue"),labels=c("timea","timeb"))

enter image description here

您还可以在此处使用构面-

ggplot(df) + aes(x=reorder(object,-measures),plot.title = element_text(hjust = 0.5))+ 
  facet_wrap(.~time,scales = 'free') + 
  scale_fill_manual(name="Legend","timeb"))

enter image description here

数据

df <- tibble::tibble(measures = c(2,4,26,10,18,20,14,22,12,16,24,6,8,28),object = seq_along(measures),time = sample(c("timea","timeb"),length(measures),replace = TRUE))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。