R语言 在ggplot2中设置具有不同叠加图的组中的形状类型

jk9hmnmh  于 2023-04-27  发布在  其他
关注(0)|答案(1)|浏览(215)

我希望在按组编码时微调两个叠加图中的ggplot2形状类型。这可能吗?我创建了一个带点图,其中点用于均值观测,用两种不同的形状编码两个不同的播种率因子,用三种不同的颜色编码不同的肥料价格情景。我包括用于计算这些均值的值的抖动观测,也由相同的颜色和形状组列出的平均值点编码。我包括线显示每个平均值的标准误差。
为了提高可视化效果,我希望抖动观察结果为开放形状,而均值为闭合形状。

library(ggplot2)
p<-ggplot()+  geom_jitter(data=econ4,position=position_jitter(0.2),aes(x=location,y=profit,shape=seeding.rate,colour=urea.cost.USD,alpha=0.05))+theme_bw()+geom_hline(yintercept=0)+labs(y = "profit per ha (USD)")
p<-p+geom_point(data=econ4,aes(x=location,y=mean.profit,colour=urea.cost.USD,shape=seeding.rate))
p<-p+geom_linerange(data=econ4,aes(x=location,y=mean.profit,ymin=mean.profit-se.profit,ymax=mean.profit+se.profit,colour=urea.cost.USD)) 
#p<-p+scale_shape_manual(values=1:2)
p<-p+scale_colour_manual(values=c("#0072B2","#009E73", "#CC79A7"))
p<-p + coord_flip()
p<-p+scale_shape_manual(values=1:2) #this changes all shapes to open.  I would like this to apply only to the geom_jitter.

xtupzzrd

xtupzzrd1#

当你想要不同形状的抖动和平均点Mapseeding.rate上的shape是不够的。相反,你必须“重新编码”seeding.rate来区分抖动和平均点,并得到四个不同的形状。为此,你可以Map例如。geom_jitter中的shape aes上的paste0(seeding.rate, ".jitter")geom_point中的shape aes上的paste0(seeding.rate, ".mean")。因此,我们有四个不同的类别,我们可以为您分配所需的四种不同形状。
此外,我稍微重构了您的代码,而不是手动计算meanse,我使用stat="summary"来计算动态统计数据。
使用一些假随机示例数据:

library(ggplot2)

set.seed(123)

econ4 <- data.frame(
  location = sample(LETTERS[1:5], 100, replace = TRUE),
  urea.cost.USD = sample(c("300", "550", "1000"), 100, replace = TRUE),
  seeding.rate = sample(c("Mirsky", "Poffenbarger"), 100, replace = TRUE),
  profit = rlnorm(100, 4) - 100
)

ggplot(econ4, aes(profit, location, colour = urea.cost.USD)) +
  geom_vline(xintercept = 0) +
  geom_jitter(
    position = position_jitter(0.2),
    aes(shape = paste0(seeding.rate, ".jitter")), alpha = .8,
    size = 2
  ) +
  geom_point(aes(shape = paste0(seeding.rate, ".mean")),
    stat = "summary", fun = mean, size = 2
  ) +
  geom_linerange(stat = "summary", fun.data = "mean_se") +
  scale_colour_manual(
    values = c("#0072B2", "#009E73", "#CC79A7")
  ) +
  scale_shape_manual(
    values = c(Mirsky.jitter = 16, Mirsky.mean = 21, Poffenbarger.jitter = 17, Poffenbarger.mean = 24),
    breaks = c("Mirsky.jitter", "Poffenbarger.jitter"),
    labels = c("Minsky", "Poffenbarger")
  ) +
  theme_bw() +
  labs(x = "profit per ha (USD)", shape = "seeding rate")

相关问题