如何使用ggplot2上的标识控制直方图的排序

时间:2018-01-10 13:42:41

标签: r ggplot2

我是R和ggplot2的新手。我正在使用ISLR包中的College数据集。当我制作直方图并用aes填充(fill = Private)时,我会得到以下图表。 enter image description here 这个情节非常具有误导性,因为如果我创建一个Private的表我会得到

否是

212 565

但是从ggplot2创建的直方图可以被解释为具有更多" No"而不是"是"。 参考课程有下图,它正确地描述了"是"并且"否",但根据直方图的创建者,它是使用较旧版本的ggplot2生成的。请注意,我看到了统计数据的差异,但这并没有消除这篇文章的目标。 enter image description here

问题是如何生成这个直方图以产生描绘正确的"是"和"不"如第二个直方图中所示,新版本的ggplot2?

我已查看其他几个SO帖子,例如for stacksmore stacksfor barplotshere,和 from ggplot2,但我还没有看到直方图的答案。 我已尝试使用dplyr包安排和R顺序功能,但无济于事。

这是我的R代码

library(ISLR)
library(ggplot2)
library(dplyr)
df<-College

ggplot(df,aes(F.Undergrad))+geom_histogram(aes(fill=Private),bins = 50,color='black',alpha=0.5)+theme_bw()

2 个答案:

答案 0 :(得分:2)

如果我理解正确,您需要做的就是重新排序df $ Private的因子级别:

df$Private <- relevel(df$Private, "Yes")

ggplot(df, aes(F.Undergrad)) +
  geom_histogram(aes(fill = Private),
                 bins = 50,
                 color = 'black',
                 alpha = 0.5) +
  theme_bw()

enter image description here

信息基本相同,因为条形图是堆叠的。如果您不希望这样,请遵循@ Tino的建议并使用position = "dodge"

ggplot(df, aes(F.Undergrad)) +
  geom_histogram(aes(fill = Private),
                 bins = 50,
                 color = 'black',
                 alpha = 0.5,
                 position = "dodge") +
  theme_bw()

enter image description here

position = identity

ggplot(df, aes(F.Undergrad)) +
  geom_histogram(aes(fill = Private),
                 bins = 50,
                 color = 'black',
                 alpha = 0.5,
                 position = "identity") +
  theme_bw()

enter image description here

答案 1 :(得分:0)

plot1<- ggplot(df, aes(F.Undergrad, fill=factor(Private, levels = c("Yes", "No")))) +  geom_histogram(binwidth=5)+
 scale_fill_manual(values=c("#d7191c", "#fdae61"), 
                           name="Private", 
                           labels=c("Yes","No"))+ 

我用它来按级别对直方图进行排序。可能适用于您的代码。