我想在使用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 中包含形状,我会得到这个图表,但我希望在绿色图上有开放三角形的均值点。
非常欢迎任何有关寻找解决方案的建议,谢谢!
这不是最优雅的解决方案,但您可以按照用于分面的变量的级别数来重复包含形状信息的向量 (
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())
输出: