使用 ggplot 在 R 中创建漂亮的叠加直方图
Creating nice overlayed histogram in R with ggplot
我希望得到一些帮助,使下面的直方图看起来尽可能漂亮和易于理解。我正在绘制移民与美国出生工人的工资。我想知道
1、如何修改颜色、坐标轴间隔等,让图表更clear/appealing?
2. 我怎样才能添加一个键来表明紫色是美国出生的工人,粉红色是外国出生的?
3. 如何添加两条不同的线来表示每组的中位数?每个都有相应的标签?
我目前的代码是这样设置的:
ggplot(NHIS1,aes(x=adj_SALARY, y=..density..)) +
geom_histogram(data=subset(NHIS1,IMMIGRANT=='0'), alpha=.5,binwidth=800, fill="purple",position="identity") + xlim(4430.4,50000) +
geom_vline(xintercept=median(NHIS1$adj_SALARY), col="black", linetype="dashed") +
geom_histogram(data=subset(NHIS1,IMMIGRANT=='1'), alpha=.5,binwidth=800,fill="red") + xlim(4430.4,50000)
geom_vline(xintercept=median(NHIS1$adj_SALARY), col="black", linetype="dashed")
我现在的最终直方图是这样的:
这个问题之前有人问过:overlaying-histograms-with-ggplot2-in-r讨论了几个选项和很多例子。你一定要看看它。
另一个比较分布的选项可以是使用 geom_violin()
的小提琴图。当您需要比较分布时,我认为小提琴图是更好的选择,因为它们为您提供了更大的灵活性并且仍然更清晰。但这可能只是我。参考examples in the manual.
如果您有两个变量,一个用于收入,一个用于移民身份,则不需要绘制两个直方图,但如果指定分组,一个就足够了。另外,我建议您也使用密度线,这有助于平滑直方图的颠簸:
假设这与您的数据大致相同:
df <- data.frame(income = sample(1000:5000, 1000),
born = sample(c("US", "Foreign"), 1000, replace = T))
那么绘制两个组的直方图和密度线的粗略方法是:
ggplot(df, aes(x=income, color=born, fill=born)) +
geom_histogram(aes(y=..density..), alpha=0.5, binwidth=100,
position="identity") +
geom_density(alpha=.2)
我希望得到一些帮助,使下面的直方图看起来尽可能漂亮和易于理解。我正在绘制移民与美国出生工人的工资。我想知道 1、如何修改颜色、坐标轴间隔等,让图表更clear/appealing? 2. 我怎样才能添加一个键来表明紫色是美国出生的工人,粉红色是外国出生的? 3. 如何添加两条不同的线来表示每组的中位数?每个都有相应的标签?
我目前的代码是这样设置的:
ggplot(NHIS1,aes(x=adj_SALARY, y=..density..)) +
geom_histogram(data=subset(NHIS1,IMMIGRANT=='0'), alpha=.5,binwidth=800, fill="purple",position="identity") + xlim(4430.4,50000) +
geom_vline(xintercept=median(NHIS1$adj_SALARY), col="black", linetype="dashed") +
geom_histogram(data=subset(NHIS1,IMMIGRANT=='1'), alpha=.5,binwidth=800,fill="red") + xlim(4430.4,50000)
geom_vline(xintercept=median(NHIS1$adj_SALARY), col="black", linetype="dashed")
我现在的最终直方图是这样的:
这个问题之前有人问过:overlaying-histograms-with-ggplot2-in-r讨论了几个选项和很多例子。你一定要看看它。
另一个比较分布的选项可以是使用 geom_violin()
的小提琴图。当您需要比较分布时,我认为小提琴图是更好的选择,因为它们为您提供了更大的灵活性并且仍然更清晰。但这可能只是我。参考examples in the manual.
如果您有两个变量,一个用于收入,一个用于移民身份,则不需要绘制两个直方图,但如果指定分组,一个就足够了。另外,我建议您也使用密度线,这有助于平滑直方图的颠簸:
假设这与您的数据大致相同:
df <- data.frame(income = sample(1000:5000, 1000),
born = sample(c("US", "Foreign"), 1000, replace = T))
那么绘制两个组的直方图和密度线的粗略方法是:
ggplot(df, aes(x=income, color=born, fill=born)) +
geom_histogram(aes(y=..density..), alpha=0.5, binwidth=100,
position="identity") +
geom_density(alpha=.2)