1

我想为下面称为 df 的数据框中的每一列数据制作相同的图。

编辑:澄清一下,我想为每一列(Cop、CopN、Harp)等制作一个新图,因为在我的实际数据中我有很多(即很多人可以在一个图上尝试和网格)我希望能够为每一列创建下面的图。

样本数据:

day <- c('5-Aug', '5-Aug','5-Aug','10-Aug','10-Aug','10-Aug','17-Aug','17-Aug','17-Aug')
station <- c(1:3,1:3,1:3)
Cop.Mean <- c(382, 1017, 1519, 698, 5398, 2458, 346, 5722, 6253)
CopN.Mean <- c(233, 167, 530, 36, 124, 20, 427, 1768, 1486)
Harp.Mean <- c(20, 482, 10, 8, 4014, 7, 4, 46, 1)
df <- data.frame(day,station,Cop.Mean, CopN.Mean, Harp.Mean)

我的情节:

library(ggplot2)
library(scales)
Cop.Plot <- ggplot(data=df, aes(x=station, y=Cop.Mean)) +
         geom_point() + facet_grid(.~day) 
         print(Cop.Plot)

我想为我在这个例子中的三列数据(即df [3:5])中的每一列制作这个图,但我无法弄清楚如何在aes()中引用多列。(IE

aes(x=station, y=df[3:5]) 

不起作用。我也试过

i=df[3:5] 
aes(x=station, y=i)

但我认为我可能没有使用正确的方法。有人会这么好心给我指出正确的方向吗?这似乎是学习如何做的一个非常有用的工具,我非常渴望这样做!

4

3 回答 3

2
library(ggplot2)
library(reshape2)
moltendf <- melt(df, id.vars=c("day","station"))
allplots <- ggplot(data=moltendf, aes(x=station, y=value)) +
             geom_point() + facet_grid(variable ~ day)

但我不清楚您是否希望它们全部成为一个大的分面图,或者您想为*apply每个 cop.type 创建/保存许多不同的图。如果是后者,那么使用熔融数据,您可以:

plotfun <- function(x,y) { 
                 a <- ggplot(data=x, aes(x=station, y=value)) +
                 geom_point() + facet_grid(.~ day)
                 pdf(paste0(y,".pdf"))
                 print(a)
                 dev.off()
}

mapply(plotfun, split(moltendf, moltendf$variable), as.list(1:3))
于 2013-11-22T20:55:52.823 回答
1

这是你的想法吗?

library(reshape2)
ggdata <- melt(df,id=1:2,variable.name="Measure",value.name="Mean")
ggplot(ggdata,aes(x=station, y=Mean)) +
  geom_point() + 
  facet_grid(Measure~day)

产生这个:

在此处输入图像描述

请注意,日期的顺序是错误的。

于 2013-11-22T21:03:28.820 回答
1

正如baptiste所提到的,该reshape2软件包将为您提供帮助。这是完整的代码:

library(reshape2)
df <- melt(df, id = c("day", "station"))
Cop.Plot <- ggplot(data = df, aes(x = station, y = value)) + geom_point()
Cop.Plot + facet_grid(variable ~ day)

我建议通过以下方式将转换day作为一个因素并按时间顺序对级别进行排序:

day <- factor(day, levels = c('5-Aug', '10-Aug', '17-Aug'))

否则,它们将按字母顺序排序。

于 2013-11-22T20:45:20.653 回答