使用R中的multhist创建包含多个数据系列的直方图

Emi*_*ily 4 graphics r histogram plotrix

我想在同一个图上创建一个包含多个数据系列的直方图.我能找到的最佳方法是multhist().我想要一个类似的风格的情节hist(),虽然ggplot()也可以用来执行这个任务,图形样式不是我想要的.

以下是一些示例数据:

df <- structure(list(year = c(2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 
2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 
2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2012L, 
2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 
2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 
2012L, 2012L, 2012L), count = c(187L, 199L, 560L, 1000L, 850L, 
400L, 534L, 911L, 390L, 1008L, 1173L, 1222L, 810L, 950L, 752L, 
1125L, 468L, 710L, 290L, 670L, 855L, 614L, 1300L, 950L, 670L, 
888L, 490L, 557L, 741L, 700L, 954L, 378L, 512L, 780L, 951L, 398L, 
1544L, 903L, 769L, 1399L, 1021L, 1235L, 1009L, 1222L, 255L)), .Names = c("year", 
"count"), class = "data.frame", row.names = c(NA, -45L))
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止使用的代码:

require(plotrix)
d2011<-df$count[df$year=="2011"]
d2012<-df$count[df$year=="2012"]
year<-list(d2011,d2012)
mh <- multhist(year, xlab="Count", ylab="Frequency", main="", cex.axis=1, col=c("dark gray", "light gray"), breaks=seq(0,1600, by=200))
box(bty="l", col="black")
legend.text<-c("2011","2012")
legend(locator(1), legend=legend.text, col=c("dark gray", "light gray"), pch=15, bty="n", cex=0.8)
Run Code Online (Sandbox Code Playgroud)

这为我提供了一个'条形图样式'多直方图,但我在更改两个图形参数时遇到了问题.

  1. 我希望情节看起来更像直方图而不像条形图,所以首先我要删除(或减少)列之间的空间.我尝试过使用space = NULL,但是这个命令似乎不适用于multhist

  2. 我想更改x轴,以便在绘图上的条之间存在轴刻度标记,并且轴文本与刻度标记对齐而不是位于条中点.我尝试过使用axis(side=1, …),但由于multhist使用列表对象创建绘图,这些命令似乎不起作用.

任何建议将不胜感激.对于可以使用多个数据集绘制直方图的其他有用图形包的建议也将受到欢迎.

Rol*_*and 5

阅读文档barplot以了解如何指定零空间:

multhist(year, xlab="Count", ylab="Frequency", main="", 
         cex.axis=1, col=c("dark gray", "light gray"), 
         breaks=seq(0,1600, by=200),
         space=c(0,0), beside=TRUE)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

以下是ggplot2的示例theme_bw:

library(ggplot2)

ggplot(df, aes(x=count,group=year,fill=as.factor(year))) + 
  geom_histogram(position="identity", alpha=0.5, breaks=seq(0,1600, by=200),right=TRUE) +
  scale_fill_discrete(name="Year") +
  theme_bw(base_size=20) +
  xlab("values")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

或者,如果你真的想要它的情节multhist(这不容易解释):

ggplot(df, aes(x=count,group=year,fill=as.factor(year))) + 
  geom_histogram(position="dodge", breaks=seq(0,1600, by=200),right=TRUE) +
  scale_fill_discrete(name="Year") +
  theme_bw(base_size=20) +
  xlab("values") +
  scale_x_continuous(breaks=seq(100,1500, by=200))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述