首页 > 解决方案 > 使用 geom_bar(stat="identity") 时对值进行排序

问题描述

问题

我正在使用ggplot2,我目前遇到以下问题。我有以下数据集,可以复制。

library(tidyverse)
TestDF = data.frame(Effect1 = rnorm(100, 10, 1), Effect2 = rnorm(100, 5, 1)) %>% 
  arrange(Effect1) %>% mutate(IDs = 1:100) %>% 
  melt(measure.vars = 1:2 , variable.name = "Effects") 

由于我希望x根据 的值对其进行排序Effect1,因此我已将其放入arrange(Effect1)数据框。然后我使用以下代码绘制:

ggplot(TestDF, aes(IDs, y=value, fill=Effects)) + 
  geom_bar(stat="identity", alpha = .7)

而我遇到的问题:情节具有增加值的“一般”趋势Effect1(正如我们从左到右看到的那样),但从未完全根据 的值排序Effect1


我试过的

我努力了

TestDF$IDs = factor(TestDF$IDs, levels=1:100)

但它从来没有解决我的问题。任何其他解决方案(或绕过)?

标签: rggplot2

解决方案


看起来 barplot 正在做你想做的事,但效果的顺序使它看起来不对。如果 Effect1 低于 Effect2,则绘图看起来正确。

library(tidyverse)
library(reshape2)

TestDF = data.frame(Effect1 = rnorm(100, 10, 1), Effect2 = rnorm(100, 5, 1)) %>% 
  arrange(Effect1) %>% mutate(IDs = 1:100) %>% 
  melt(measure.vars = 1:2 , variable.name = "Effects")  %>% 
  mutate(Effects = factor(Effects, levels = c('Effect2', 'Effect1')))

ggplot(TestDF, aes(IDs, y=value, fill=Effects)) + 
  geom_bar(stat="identity", alpha = .7)

在此处输入图像描述


推荐阅读