在我提出问题之前,我应该指出我是R的新手,对于有经验的用户来说,这个问题本身可能是简单的。 我想使用ggplot2来充分利用其中的所有功能。但是,我遇到了一个我无法解决的问题。 如果我有如下数据框:
df = as.data.frame(cbind(rnorm(100,35:65),rnorm(100,25:35),rnorm(100,15:20),rnorm(100,5:10),rnorm(100,0:5)))
header = c("A","B","C","D","E")
names(df) = make.names(header)
绘制数据,其中行是Y,X是列,可以很容易地在基数R中完成,例如,这样:
par(mfrow=c(2,0))
stripchart(df, vertical = TRUE, method = 'jitter')
boxplot(df)
The picture shows the stripchart & boxplot of the data
然而,由于需要x
和y
输入,因此无法在ggplot2中轻松完成相同操作。我找到的所有示例都绘制了一列与另一列,或将数据处理为列格式。但是,我想将y
设置为df
和x
中的行作为列。如何实现这一目标?
答案 0 :(得分:4)
您需要重塑数据才能获取这些图表。我认为这就是你要找的东西:
> library(ggplot2)
> library(reshape2)
> df = as.data.frame(cbind(rnorm(100,35:65),rnorm(100,25:35),rnorm(100,15:20),rnorm(100,5:10),rnorm(100,0:5)))
> header = c("A","B","C","D","E")
> names(df) = make.names(header)
> df = melt(df)
No id variables; using all as measure variables
> head(df)
variable value
1 A 36.75505
2 A 35.68714
3 A 36.44952
4 A 38.77236
5 A 39.79136
6 A 39.39672
> ggplot(df, aes(x = variable, y = value))
> ggplot(df, aes(x = variable, y = value)) + geom_boxplot()
> ggplot(df, aes(x = variable, y = value)) + geom_point(shape = 0, size = 20)
您可以更改aes()
选项中的设置。有关详细信息,请参阅here。