【问题标题】:r plot multiple ggplot, stat_smooth on pngr在png上绘制多个ggplot,stat_smooth
【发布时间】:2017-05-06 08:10:32
【问题描述】:

我正在尝试使用带有 png 作为背景的 ggplot() 或 stat_smooth() 以平滑线绘制多个数据帧。

我有三个数据框

data1 <- data.frame(Max.x, Max.y)  
data2 <- data.frame(Med.x, Med.y)  
data3 <- data.frame(Min.x, Min.y)  

和一个图片(png)文件

mypng <- readPNG("picture.png")

我发现使用 stat_smooth(span=0.4) 它将创建一条穿过数据框中所有点的平滑线。

现在我正在尝试在 mypng 上绘制三条平滑线

我已经尝试了几件事。

ggplot(data1, aes(x=Max.x, y=Max.y))+scale_x_continuous(limits = c(126,129))+scale_y_continuous(limits = c(37.5, 38.5))+ annotation_raster(mypng, xmin=126, xmax=129, ymin=37.5, ymax=38.5)+stat_smooth(span=0.4) 

data2 和 data3 也是如此。这会将每一行绘制在 png 上,但我无法找到一种方法将所有三行绘制到同一个 png 上。
另外,请注意,绘图必须设置 x,y max 和 min b/c 我的数据位于这些坐标之间。

我尝试的另一件事:

ggplot()+annotation_raster(mypng, xmin=126, xmax=129, ymin=37.5, ymax=38.5)+stat_smooth(data=data1, aes(x=Max.x, y=Max.y), span=0.4)+stat_smooth(data=data2, aes(x=Med.x, y=Med.y), span=0.4)+stat_smooth(data=data3, aes(x=Min.x, y=Min.y), span=0.4)+scale_x_continuous(limits=c(126,129))+scale_y_continuous(limits=c(37.5,38.5))

这会绘制所有三个平滑线。然而图片并没有显示出来。

我现在卡住了...我可以在 mypng 上获得三个不同的图。我可以得到所有三个图,但不能在 mypng 上。 如何在 mypng 上获得所有三行?

【问题讨论】:

  • 您的代码中有错字:annotation_rater 应该是 annotation_raster。此外,如果您将三个数据框堆叠成一个数据框,您只需调用一次geom_smooth
  • 对不起类型。我在没有互联网的计算机上工作,所以我不得不在这里手动重写代码.. 就你而言.. 我无法组合数据框,因为我看到三个不同的行。如果我将它们堆叠在一起,它只会创建一个。
  • 是的,但是您添加另一个分组列来标记每行来自哪个数据框,并将该列映射到 groupcolour 美学。 @Mist 的回答说明了我的意思。

标签: r ggplot2 png raster


【解决方案1】:

怎么样:

library(png)
library(ggplot2)

data1 <- data.frame(series = rep("max",10),
                    x = rnorm(10, mean = 127.5, sd = 1), 
                    y = rnorm(10, mean = 38, sd = 0.25))  
data2 <- data.frame(series = rep("med",10),
                    x = rnorm(10, mean = 127.5, sd = 1), 
                    y = rnorm(10, mean = 38, sd = 0.25))  
data3 <- data.frame(series = rep("min",10),
                    x = rnorm(10, mean = 127.5, sd = 1), 
                    y = rnorm(10, mean = 38, sd = 0.25))  

df <- rbind(data1,data2,data3)

mypng <- readPNG("C:/Users/lorenzr/Pictures/family.png")

ggplot(df, aes(x=x, y=y, colour = series))+
  scale_x_continuous(limits = c(126,129))+
  scale_y_continuous(limits = c(37.5, 38.5))+
  annotation_raster(mypng, xmin=126, xmax=129, ymin=37.5, ymax=38.5)+
  stat_smooth(span=0.4) 

【讨论】:

  • 哦.. 还有.. 有没有办法改变线条的颜色?
猜你喜欢
  • 2017-02-21
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 2019-11-27
  • 2021-07-23
  • 1970-01-01
  • 1970-01-01
  • 2020-11-19
相关资源
最近更新 更多