首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在一个图中使用geom_point和geom_pointrange时,如何维护因子顺序?

在一个图中使用geom_point和geom_pointrange时,如何维护因子顺序?
EN

Stack Overflow用户
提问于 2020-03-26 03:13:33
回答 1查看 56关注 0票数 1

编辑:添加了小df。

我有一个名为benthic_data的小型数据集,其中包含一些底栖无脊椎动物索引(下面只包含一个指标)。

代码语言:javascript
复制
Site <- c('S-7','S-7','S-7','S-7','S-7','S-27','S-27','S-27','S-27','S-27')
Sample <- c('S-7-1','S-7-2','S-7-3','S-7-4','S-7-5','S-27-1','S-27-2','S-27-3','S-27-4','S-27-5')
Abundance <- c(310, 316, 361,317, 321,108, 173, 189, 229, 210)

benthic_data <- data.frame(Site, Sample, Abundance)

我已经将样本数据作为一个因素,并希望为每个样本生成一个点,然后是每个站点的平均值(带有标准偏差胡须)。

代码语言:javascript
复制
benthic_data$Sample = factor(benthic_data$Sample, levels=c('S-7-1', 'S-7-2','S-7-3','S-7-4','S-7-5','S-27-1','S-27-2','S-27-3','S-27-4', 'S-27-5'))

站点及其各自的丰度值的基本图可以很好地工作(稍后我将使该图更漂亮):

代码语言:javascript
复制
ggplot(benthic_data, aes(x=Sample, y=Abundance, fill=Site))+
    geom_point(data = benthic_data, size = 4.0, colour="black", shape=21, show.legend = F)+
  scale_fill_manual(values = c("darkgreen", "orangered3"))

为了计算每个站点的平均值和SD,我使用了以下代码来尝试和因子每个站点,我还希望每个站点的平均值/sd点分别标记为S-7平均值和S-27平均值。

代码语言:javascript
复制
benthic_summary<- as.data.frame(benthic_data) %>% 
  group_by(Site) %>% 
  summarize(mean=mean(Abundance, na.rm=T),
            sd=sd(Abundance, na.rm=T))

 benthic_summary$Site = revalue(benthic_summary$Site, c("S-7" = "S-7 Mean","S-27"="S-27 Mean"))
 benthic_summary$Site <- factor(benthic_summary$Site, levels= c("S-7 Mean","S-27 Mean"))

现在,为了组合每个站点的5个点加上每个站点的平均值/sd,我使用了带有以下代码的geom_pointrange,但我在scale_fill_manual中添加了两种更多的颜色,因为我收到了这个错误消息:错误:手动刻度中的值不足。需要4个,但只提供了2个。

所以,这段代码工作得很好,除了,我需要先有S-7样本(它是一个上游站点),然后是S-27样本,图例不能反映正确的站点颜色。

站点S-7应为绿色,站点S-27应为橙色。

代码语言:javascript
复制
AEMP_cols=c("darkgreen", "orangered3")

ggplot(benthic_data, aes(x=Sample, y=Abundance, fill=Site))+
    geom_point(data = benthic_data, size = 4.0, colour="black", shape=21, show.legend = F)+
  scale_fill_manual(values = c("darkgreen","darkgreen", "orangered3", "orangered3"))+
    geom_pointrange(data = benthic_summary, aes(x = Site, y=mean, ymin=mean-sd, ymax=mean+sd), colour = AEMP_cols, size =1, shape = 15) 

因此,我想帮助弄清楚如何确保样本(点)在x轴上的顺序是: S-7-1,S-7-2……S-7-5,S7平均值,然后是S-27-1,S-27-2....S-27-5,S-27平均值。与上面创建的代码类似,但首先是S-7站点示例,然后是S-27示例。

我可以很容易地为其他索引重新创建代码,所以我现在只是从丰富开始。

任何帮助都将不胜感激。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-26 04:25:01

你在找这样的东西吗?

我首先用计算出的每个站点的平均值生成第二个数据帧,然后将其添加为原始数据集的附加行。我重新组织了因子样本和站点的级别。我最终使用geom_pointgeom_errorbar将它传递到了ggplot中

代码语言:javascript
复制
library(dplyr)
library(ggplot2)

Mean_DF <- benthic_data %>% 
  group_by(Site) %>% 
  summarise(Mean = mean(Abundance), SD = sd(Abundance)) %>%
  mutate(Sample = c("S-27-Mean","S-7-Mean")) %>% rename(Abundance = Mean)

benthic_data %>% select(Site, Sample, Abundance) %>% bind_rows(., Mean_DF) %>%
  mutate(Site = factor(Site, levels = c("S-7","S-27"))) %>%
  mutate(Sample = factor(Sample, levels=c('S-7-1', 'S-7-2','S-7-3','S-7-4','S-7-5','S-7-Mean','S-27-1','S-27-2','S-27-3','S-27-4', 'S-27-5','S-27-Mean'))) %>%
  ggplot(aes(x = Sample, y = Abundance, color = Site))+
  geom_point()+
  geom_errorbar(aes(ymin = Abundance-SD, ymax = Abundance+SD), width = 0.2)+
  scale_color_manual(values = c("darkgreen", "orangered3"))

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60855833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档