合并2个不同数据图(箱线图和点数)

时间:2015-12-30 00:19:58

标签: r plot ggplot2

我想在彼此上面绘制两张图like in this post

实验数据:我在一个名为expt$iso_xs[,8]的列表中有一个连续变量显示给定日期的风角,然后我的风速与{{1 }}

expt$iso_xs[,2]

看起来像这样: enter image description here

模拟数据:我有一个data.frame df<-data.frame(expt$iso.xs) head(expt$iso.xs) [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] 736105.4 16.62729 2.183740 7.234774 0.9791632 4.01 4.20 238.62 736105.4 18.96705 2.489668 7.036234 0.9640366 3.82 4.00 243.14 736105.5 20.52089 2.687636 10.355394 1.3698454 4.99 5.14 247.02 736105.5 19.94449 2.611556 10.306912 1.3655301 4.85 5.12 249.57 736105.5 19.43309 2.551787 11.098302 1.4646251 4.83 5.12 243.89 736105.5 20.48259 2.689075 11.928011 1.5710530 4.89 5.09 254.23 ,其中包含上述角度(0-90º)子集的预测。

z

使用bigangle作为因子和Tracer作为:

绘制它
head(z,15)
   Tracer angle treatment bigangle
  71.101     0         S      150
  71.101     0         S      150
  71.105     15         S      165
  71.105     15         S      165
  71.098     30         S      180
  71.098     45         S      195
  71.114     60         S      210
  71.114     80         S      230
  71.110     90         S      240

看起来像这样:

enter image description here

我想在红点部分(150º和240º之间)上叠加箱线图,但以下内容不起作用:

ggplot() +
  geom_boxplot(data=z, aes(y = (3600/Tracer/93.241), x = factor(bigangle)),outlier.shape = NA,outlier.colour = NA)+
  coord_cartesian(ylim=c(0, 1))+
  labs(x = "Angle", y = "Normalised ACh" )+
  scale_x_discrete(labels=seq(0,360,10))+
  theme_classic()

enter image description here

任何想法都会非常感激, 干杯

1 个答案:

答案 0 :(得分:4)

我认为您唯一的问题是尝试为连续数据指定离散x标度。那你需要一个group作为你的boxplot geom。

作为一个说明性的例子:

mt = mtcars
mt$wt_bin = cut(mt$wt, breaks = c(1, 3, 4.5, 6))
ggplot(mt, aes(x = wt, y = mpg)) +
    geom_point() +
    geom_boxplot(aes(group = wt_bin, x = wt), alpha = 0.4)

enter image description here

正如geom_boxplot帮助所说:

  

只要您提供,您也可以使用连续x的箱形图    分组变量。 cut_width特别有用

帮助中的示例显示了此代码:

ggplot(diamonds, aes(carat, price)) +
  geom_boxplot(aes(group = cut_width(carat, 0.25)))

当然,你可以添加一个geom_point图层(虽然在diamonds数据中有太多的点可以作为一个很好的情节)。

对于您的比例,除非您在轴上有因素,否则不要使用离散比例。您可能需要scale_x_continuous(breaks = seq(0, 360, 10))

可以使用data参数以通常的方式使用不同的数据集。继续上一个示例,但为geom_point图层使用不同的数据:

similar_to_mt = data.frame(wt = runif(100, 1, 6), mpg = rnorm(100, 20, 4))
ggplot(mt, aes(x = wt, y = mpg)) +
    geom_point(data = similar_to_mt) +
    geom_boxplot(data = mt, aes(group = wt_bin, x = wt), alpha = 0.4)

enter image description here