使用R绘制来自数据集的对比图

时间:2010-10-23 07:26:33

标签: r graph dataset

我有两个季节(冬季和夏季)的一组数据(1000多只动物),并希望证明这两个季节的妊娠期(天)模式的差异。我的数据与此类似:

id <- c(1,2,3,4,5,6,7,8,9,10)
season <- c(1,1,2,2,1,2,1,1,2,1)
gest <- c(114,NA,123,116,NA,120,110,NA,116,119)

data <- cbind(id,season,gest)

我想有这样的事情:

http://had.co.nz/ggplot2/graphics/55078149a733dd1a0b42a57faf847036.png

或任何类似的图形形式,可以给我一个很好的对比。

感谢您的帮助,

Bazon

3 个答案:

答案 0 :(得分:2)

library(ggplot2)
df <- data.frame(id=id,season=season,gest=gest)
qplot(gest,data=df,geom="density",fill=season,alpha=I(0.2))

这应该与该示例类似,但您可能希望使用alpha参数来获得正确的透明度。

答案 1 :(得分:1)

有一种常用于显示人口统计数据的图表类型,特别是用于直接对比两个组,您希望在这两个组中强调子组的比较,这些组包含两个彼此相同的组除了人口统计学背景下的一些或所有变量,最常见的应用是男性与女性的年龄结构。这似乎是有效可视化数据的好选择。

下面的图表是使用R中的Base图形软件包和Duncan Temple Lang的(优秀)R Package SVGAnnotatio n创建的,用于创建交互元素(通过在SVG中重新渲染图像和对生成的XML进行后处理。)

(虽然情节是使用R和SVGAnnotate创建的,但下图来自英国政府Site)。

alt text

答案 2 :(得分:0)

您使用ggplot2关联的特定情节。我并不擅长使用它,因此我将向您展示如何使用基本图形

data <- as.data.frame(data)
d1 <- density(data$gest[which(data$season==1)], na.rm=TRUE)
d2 <- density(data$gest[which(data$season==2)], na.rm=TRUE)
plot(d1, ylim=c(0, max(d1$y,d2$y)), xlim=range(c(d1$x, d2$x)),
  main="Length of gestation", xlab="Length (days)", col="blue", lwd=2)
polygon(d1$x, d1$y, col=rgb(0, 0, 1, 0.5), lty=0)
points(d2, t="l", col="red", lwd=2)
polygon(d2$x, d2$y, col=rgb(1, 0, 0, 0.5), lty=0)

或者查看densityplot包的lattice功能,但我不确定如何填写这些内容。

PS:你的数据集很小吗?如果是这种情况,密度图可能不是可行的方法(散点图会更好)

修改

如果您想使用直方图执行此操作,您可以执行以下操作:

hist(data$gest[which(data$season==1)], main="Length of gestation", 
    xlab="Length (days)", col=rgb(0, 0, 1, 0.5))
# Note the add=TRUE parameter to superimpose the histograms
hist(data$gest[which(data$season==2)], col=rgb(1, 0, 0, 0.5), add=TRUE)