【问题标题】:Plot multiple histograms in one using ggplot2 in R在 R 中使用 ggplot2 绘制多个直方图
【发布时间】:2014-01-27 01:20:24
【问题描述】:

我对 R 和 ggplot2 还很陌生,在同一个直方图中绘制多个变量时遇到了一些麻烦。

我的数据已经分组,只需要绘制。数据是按周计算的,我需要绘制每个类别(A、B、C 和 D)的数字。

Date          A    B    C    D
01-01-2011    11   0    11   1
08-01-2011    12   0    3    3
15-01-2011    9    0    2    6

我希望日期作为 x 轴,计数根据通用 y 轴绘制为不同颜色。 我一次只能绘制一个类别,但找不到像我这样的例子。

这是我用来绘制一个类别的。我很确定我需要使用position="dodge" 来绘制多个,因为我不希望它被堆叠。

ggplot(df, aes(x=Date, y=A)) + geom_histogram(stat="identity") + 
labs(title = "Number in Category A") +
ylab("Number") + 
xlab("Date") +
theme(axis.text.x = element_text(angle = 90))

此外,这给了我一个直方图,条形之间有空格。有什么办法可以去掉这个吗?我尝试了spaces=0,就像您在绘制条形图时所做的那样,但它似乎不起作用。

我阅读了一些与我类似的以前的问题,但数据格式不同,我无法对其进行调整以适应我的数据。 这是我查看的一些帮助:

Creating a histogram with multiple data series using multhist in R

http://www.cookbook-r.com/Graphs/Plotting_distributions_%28ggplot2%29/

我也不太确定 bin 宽度是多少。我认为这是数据应该如何间隔或分组,这不适用于我的问题,因为它已经分组。如果我对此有误,请告诉我。

任何帮助将不胜感激。 提前致谢!

【问题讨论】:

标签: r histogram


【解决方案1】:

您实际上并不是在绘制直方图,您只是在绘制一个看起来有点像直方图的条形图。我个人认为这是一个很好的分面案例:

library(ggplot2)
library(reshape2) # for melt()
melt_df <- melt(df)
head(melt_df) # so you can see it

ggplot(melt_df, aes(Date,value,fill=Date)) + 
 geom_bar() + 
 facet_wrap(~ variable)

不过,总的来说,我认为随时间的变化最好用折线图来表示:

ggplot(melt_df,aes(Date,value,group=variable,color=variable)) + geom_line() 

【讨论】:

  • 图例给了我日期值而不是类别。我尝试将fill=Date 更改为fill=names(df)[-1] 之类的东西,认为这会有所帮助,但我遇到了美学错误,所以它没有绘制任何内容。有没有办法解决这个问题?
  • 如果您使用分面,颜色参考日期,因为每个分面代表变量。
  • 哦,对,没错。我应该意识到这一点。非常感谢你的帮助。此外,为了在绘图时删除警告,我添加了stat="identity",因为我的数据已经汇总。
  • 你的最后一个带有线条的图表很漂亮,但我有一个小问题,是否可以为每条线添加点作为 x 轴上的参考值@BrandonBertelsen
猜你喜欢
  • 1970-01-01
  • 2012-06-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多