组合散点图和条形图,然后套用

时间:2018-11-05 10:16:29

标签: r ggplot2 lapply

我正在尝试使用ggplot在同一绘图区域内添加散点图和条形图。散点图应为var的平均值。对于一个数据集,变量“ 2”上的变量为“ 1”,且条形图应为我的控制数据集上的平均值“ 1”。

我的数据如下:

> dput(lapply(ubbs6, head))
list(structure(c(96L, 96L, 100L, 88L, 93L, 100L, 61L, 61L, 70L, 
40L, 58L, 70L, 7807L, 7357L, 7695L, 6400L, 6009L, 7735L), .Dim = c(6L, 
3L), .Dimnames = list(NULL, c("1", "2", "3"))), structure(c(99L, 
96L, 100L, 96L, 96L, 96L, 66L, 67L, 70L, 63L, 57L, 62L, 7178L, 
6028L, 6124L, 6082L, 6873L, 5629L, 31L, 27L, 60L, 42L, 12L, 18L
), .Dim = c(6L, 4L), .Dimnames = list(NULL, c("1", "2", 
"3", "4"))), structure(c(99L, 95L, 95L, 100L, 96L, 95L, 69L, 
58L, 56L, 70L, 61L, 65L, 6067L, 6331L, 6247L, 5988L, 7538L, 6162L, 
50L, 36L, 67L, 10L, 55L, 70L), .Dim = c(6L, 4L), .Dimnames = list(
    NULL, c("1", "2", "3", "4"))))

到目前为止我尝试过的示例:

 aggregate(ubbs6[[2]][,'1'], list(ubbs6[[2]][,'2']), mean)

m162 <- aggregate(ubbs6[[2]][,'1'], list(ubbs6[[2]][,'2']), mean)
m163 <- aggregate(ubbs6[[3]][,'1'], list(ubbs6[[3]][,'2']), mean)
m161 <- mean(ubbs6[[1]][,'1'])

ggplot(m162, aes_(x = m162[,'Group.1'], y = m162[,'x']))+
  geom_point()+
  geom_smooth(method = 'lm', formula = 'y ~ sqrt (x)')

我想做两件事:

  1. 添加一个控制集(ubbs6 [[1]])的一个x,y值的条形图
  2. 将其放入一个lapply结构中,这样我就可以对11个相似的数据集进行

    任何帮助将不胜感激!

**编辑:编辑了其他人不需要的特定细节,以了解代码**

1 个答案:

答案 0 :(得分:1)

将数据保存在d中,您可以尝试

ggplot(as.data.frame(d[[2]]),aes(age, FPAR) ) + 
   coord_cartesian(ylim = c(90,100)) +
   geom_point() + 
   geom_smooth(method = 'lm', formula = 'y ~ sqrt (x)') + 
   geom_col(data=data.frame(x=max(as.data.frame(d[[2]])$age),
                       y=mean(as.data.frame(d[[1]])$FPAR)),
                       aes(x,y), inherit.aes = FALSE)

enter image description here

您必须使用coord_cartesian指定y限制和inherit.aes = FALSE。否则,将无法正确绘制钢筋。

当您必须在一个绘图中组合第二个和第三个数据框时,可以尝试

library(tidyverse)
d %>% 
  .[2:3] %>% 
  map(as.data.frame) %>% 
  bind_rows(.id = "id") %>% 
  mutate(max = max(age),
         Mean = mean(d[[1]][1])) %>% 
  ggplot(aes(age, FPAR, color=id)) +
   geom_point() + 
   geom_smooth(method = 'lm', formula = 'y ~ sqrt (x)', se=FALSE) + 
    geom_col(data = . %>% distinct(max, Mean),
             aes(max, Mean), inherit.aes = FALSE)

enter image description here