是否可以在ggplot中创建3个系列(2行和1个点)刻面图?

时间:2013-01-23 07:21:28

标签: r ggplot2

我正在尝试用R中的基本图形包编写一个代码到ggplot。

我使用基本图形包获得的图表如下:

![在此处输入图片说明] [1]

我想知道这种类型的图表是否可以在ggplot2中创建。我认为我们可以通过使用面板创建这种图形,但我想知道是否可以使用切面这种情节。我遇到的主要困难是最大值和最小值有共同长度,而观察到的数据不是连续数据,间隔是完全不同的。

任何关于为这类情节安排数据的想法都会非常有帮助。非常感谢你。

2 个答案:

答案 0 :(得分:1)

Jdbaba,

根据您的评论,您提到您希望geom_point只包含图例中的.。这是一个尚未实现的功能,可直接在ggplot2中使用(如果我是对的)。但是,this post@Aniko提供了修复/解决方法。它有点棘手,但很棒!而且效果很好。这是我试过的版本。希望这是你的期望。

# bind both your data.frames
df <- rbind(tempcal, tempobs)

p <- ggplot(data = df, aes(x = time, y = data, colour = group1, 
                 linetype = group1, shape = group1))
p <- p + geom_line() + geom_point()
p <- p + scale_shape_manual("", values=c(NA, NA, 19))
p <- p + scale_linetype_manual("", values=c(1,1,0))
p <- p + scale_colour_manual("", values=c("#F0E442", "#0072B2", "#D55E00"))
p <- p + facet_wrap(~ id, ncol = 1)
p

我们的想法是首先在美学部分创建一个包含所有必要属性的图,绘制您想要的图,然后使用scale_._manual手动更改设置。例如,unset中的0可以scale_linetype_manual行。同样,您可以在unset中使用NA指向scale_shape_manual个点。此处,前两个值适用于group1=maximum and minimum,最后一个值适用于observed。因此,我们将NA设置为maximumminimum的前两个,并将0设置为linetype的{​​{1}}。

这就是情节:

enter image description here

答案 1 :(得分:0)

找到解决方案: 感谢Arun和Andrie

以防有人需要解决此类问题。

我使用的代码如下:

library(ggplot2)
tempcal <-  read.csv("temp data ggplot.csv",header=T, sep=",")
tempobs <- read.csv("temp data observed ggplot.csv",header=T, sep=",")
p <- ggplot(tempcal,aes(x=time,y=data))+geom_line(aes(x=time,y=data,color=group1))+geom_point(data=tempobs,aes(x=time,y=data,colour=group1))+facet_wrap(~id)
p

使用的数据集是https://www.dropbox.com/s/95sdo0n3gvk71o7/temp%20data%20observed%20ggplot.csv

https://www.dropbox.com/s/4opftofvvsueh5c/temp%20data%20ggplot.csv

获得的情节如下:

enter image description here

Jdbaba