【问题标题】:How to set y=rows and x=columns in ggplot2?如何在 ggplot2 中设置 y=rows 和 x=columns?
【发布时间】:2018-05-07 18:30:14
【问题描述】:

在我提出问题之前,我应该指出我是 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

但是,在 ggplot2 中无法轻松完成相同的操作,因为需要 xy 输入。我发现的所有示例都绘制了一列与另一列的图,或者将数据处理为列格式。然而,我想将y 设置为df 中的行,并将x 设置为列。这如何实现?

【问题讨论】:

  • 你要制作箱线图?
  • 我的目标是叠加抖动+小提琴+箱形图,但我的数据通常是这种形状,我希望能够对任何给定类型的适用绘图类型执行此操作。

标签: r ggplot2


【解决方案1】:

您需要重塑数据才能获得这些图表。我想这就是你要找的:

> 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 了解更多信息。

【讨论】:

  • 阅读这篇文章,了解何时使用长数据和宽数据(您的数据):stackoverflow.com/questions/34590173/…
  • 我可以看到这对于小型数据集(例如我包含的随机数据集)是如何工作的,但是,此解决方案将所有数据移动到一列中,并使用以前的列名添加一个新列。当数据集较大时,例如 100 多个变量和数百个数据条目,使用这样的方法似乎会更加困难......无论如何,您的解决方案有效,所以谢谢您。跨度>
  • 我已经编辑了帖子以包含制作条形图的代码。如果此解决方案适合您,请接受我的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多