使用facet_grid在小提琴图上显示不同的平均符号

问题描述 投票:0回答:1

我想在使用facet_grid时将三角形均值符号更改为在绿色小提琴图上打开。使用 ggplot2,我可以通过在 stat_summary 中包含“shape=c(19, 2)”来在单个图表(如下图所示)上获得此结果,并且希望网格也看起来像这样。

这是我使用的数据示例

这是我用来组织数据和标签的代码。使用 stat_summary 中包含的形状代码,它不会返回图形,而且我还没有找到解决方案

        CombFEC <- Chp2FEC1 %>% gather(Day, EPG, 2:9)

    Dayorder <- CombFEC                            
Dayorder$Day <- factor(Dayorder$Day,     
                       levels = c("Day0", "Day14", "Day28", 
                                  "Day42", "Day56", "Day70",
                                  "Day84", "Day98")) 
glimpse(Dayorder)

FEC.labs <- c(Day0 = "Day 0", Day14 = "Day 14", Day28 = "Day 28",
              Day42 = "Day 42", Day56 = "Day 56", Day70 ="Day 70",
              Day84 = "Day 84", Day98 = "Day 98")
FEC.labs

    FEC3 <- ggplot(Dayorder, aes(x=Status, y=EPG, fill=Status, shape=Status)) +
  geom_violin(width=1.4)+
  scale_fill_manual(values=c("#56B4E9", "#009E73"))+
  geom_jitter(position = position_jitter(), 
              aes(colour = Status),
              cex = 3) +
  scale_color_manual(values=c("#0066CC", "#003300"))+
  ylab("Log (eggs per gram +1)") +
  scale_y_log10()+
  theme(axis.title.x = element_blank())+
  theme(axis.text.x = element_blank())+
  theme(axis.ticks.x = element_blank())+
  theme(axis.text.y = element_text(size=40))+
  theme(axis.title.y = element_text(size=50))+
  theme(legend.position = "none")

FEC4 <- FEC3 +  facet_grid(. ~ Day, switch = "both", labeller = labeller(Day = FEC.labs, label_wrap_gen(20)))+
  theme(strip.background = element_rect( fill="#FFFFFF", size=1.5, linetype="blank"))+
  theme(strip.text.x = element_text(size=40))

FEC4 + stat_summary(fun.data=mean_sdl, mult=1, 
                    geom="pointrange", shape=c(19, 2), size = 2)

如果没有在 stat_summary 中包含形状,我会得到这个图表,但我希望在绿色图上有开放三角形的均值点。

非常欢迎任何有关寻找解决方案的建议,谢谢!

shapes mean symbols
1个回答
0
投票

这不是最优雅的解决方案,但您可以按照用于分面的变量的级别数来重复包含形状信息的向量 (

Day
)。
shape
stat_summary()
参数可能如下所示:
shape = rep(c(19, 2), length(unique(CombFEC$Day)))

以下代码生成与您类似的图,但使用空心三角形表示“PPID”组的平均值:

# load libraries
library(tidyr)
library(ggplot2)

# get your data sample
Chp2FEC1 <- structure(list(Status = c("PPID", "PPID", "PPID", "PPID", "Control",
                                      "Control", "Control", "Control"),
                           Day0 = c(1695, 0, 0, 652, 0,1440, 2865, 165),
                           Day14 = c(156, 0, 0, 0, 74, 0, 0, 0),
                           Day28 = c(333, 0, 0, 42, 0, 0, 0, 0),
                           Day42 = c(248, 0, 0, 39, 117, 39, 82,0),
                           Day56 = c(845, 0, 0, 100, 309, 40, 39, 0),
                           Day70 = c(694,0, 0, 384, 0, 0, 420, 78),
                           Day84 = c(85, 0, 201, 405, 165, 41, 79, 198),
                           Day98 = c(1777, 40, 0, 549, 208, 127, 85, 42)),
                      row.names = c(NA, 8L), class = "data.frame")

# transform to long format
CombFEC2 <- pivot_longer(data = Chp2FEC1,
                         cols = starts_with("Day"),
                         names_to = "Day")

# avoid scientific notion in plots
options(scipen = 999)

# plot
ggplot(data = CombFEC, aes(x = Status, y = EPG+1)) +
  facet_wrap(~Day, nrow = 1, strip.position = "bottom") +
  geom_violin(aes(fill = Status)) +
  geom_jitter(aes(color = Status), width = .2, height = 0) +
  stat_summary(fun.data = mean_sdl,
               shape = rep(c(19, 2), length(unique(CombFEC$Day)))) +
  scale_y_log10(name = "Log (eggs per gram +1)") +
  scale_fill_manual(values = c("#56B4E9", "#009E73")) +
  scale_color_manual(values=c("#0066CC", "#003300")) +
  theme_minimal() +
  theme(axis.line = element_line(),
        panel.grid = element_blank(),
        strip.text = element_text(colour = "black"),
        axis.ticks.x = element_blank(),
        axis.text.x = element_blank(),
        axis.title.x = element_blank())

输出:

© www.soinside.com 2019 - 2024. All rights reserved.