geom_bar和geom_jitter的不同颜色

qnzebej0  于 2023-05-04  发布在  其他
关注(0)|答案(1)|浏览(299)

我试图创建一个图,其中geom_bar表示一组数据点的平均值,单个数据点使用geom_jitter显示。我希望条形图按因子着色,但单个数据点为白色。
这是我的剧本:

ggplot(dataframe, 
       aes(x = `glucose`, y = `CTV dilution factor`, fill = `cellobiose`))+
  geom_bar(stat = "summary", position = "dodge")+
  geom_jitter(position = position_jitterdodge(), 
              shape = 21, stroke=0.5, size=2.5, show.legend = FALSE)+
  ylab("CTV dilution factor")+
  xlab("glucose [mM]")+
  facet_wrap(~condition, ncol=2)+
  theme_manish()+
  theme(text=element_text(size=16))

正如您所看到的,条和抖动点填充了相同的颜色。我想保留条上的颜色,但抖动点用白色填充。
有什么建议吗?谢谢!

sqxo8psd

sqxo8psd1#

默认的实现方法是为geom_jittergeom_point设置fill="white",并使用group aes,即在geom_point中使用group=cellobiose来通过cellobiose来闪避点。然而,当这样做时,我遇到了一个错误,似乎是一个已知的,但仍然无法解决的issue
一个可能的解决方法是Map到color美学上,并使用scale_color_manual将轮廓颜色设置为"black"
使用基于mtcars的最小可再现示例:

dataframe <- mtcars[c("cyl", "mpg", "am", "vs")]
dataframe[c("cyl", "am", "vs")] <- lapply(dataframe[c("cyl", "am", "vs")], factor)
names(dataframe) <- c("glucose", "CTV dilution factor", "cellobiose", "condition")

library(ggplot2)

ggplot(
  dataframe,
  aes(x = glucose, y = `CTV dilution factor`, fill = cellobiose)
) +
  geom_bar(stat = "summary", position = "dodge") +
  geom_point(aes(color = cellobiose),
    fill = "white",
    position = position_jitterdodge(dodge.width = .9, seed = 1),
    shape = 21, stroke = 0.5, size = 2.5, show.legend = FALSE,
  ) +
  scale_color_manual(values = rep("black", 2)) +
  ylab("CTV dilution factor") +
  xlab("glucose [mM]") +
  facet_wrap(~condition, ncol = 2) +
  # theme_manish() +
  theme(text = element_text(size = 16))

相关问题