首页 > 解决方案 > 结合散点图和条形图,然后 lapply

问题描述

我正在尝试使用 ggplot 在同一绘图区域内添加散点图和条形图。散点图应该是 var 的平均值。'1' over var.'2' 对于一个数据集,条形图应该是我的控制数据集上的 '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 个类似的数据集执行此操作

    任何帮助将不胜感激!

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

标签: rggplot2lapply

解决方案


保存你的数据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)

在此处输入图像描述

您必须使用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)

在此处输入图像描述


推荐阅读