使用ggplot2+;基于单独的列向每行添加点;linerange()

使用ggplot2+;基于单独的列向每行添加点;linerange(),r,ggplot2,R,Ggplot2,我有一个线性范围图,显示了一段时间内看到的鸟类及其饮食 使用下面的示例,我想在标题为时间段的列的基础上再添加一层,该列将数据分为3个级别:20年。然而,我被卡住了。我想: 根据time\u period列,在每行旁边添加一个彩色点(理想情况下与行大小相同) 在下面添加一个图例,显示每个点的含义 数据集取自,如下所示(感谢Stephen Henderson,他正确地指出我之前附加了错误的数据集-这与用于线条图的数据集相同): 让我们看看这是否适合你(如果这是你正在寻找的) 我已经添加了一个geom

我有一个线性范围图,显示了一段时间内看到的鸟类及其饮食

使用下面的示例,我想在标题为
时间段
的列的基础上再添加一层,该列将数据分为3个级别:
20年
。然而,我被卡住了。我想:

  • 根据
    time\u period
    列,在每行旁边添加一个彩色点(理想情况下与行大小相同)

  • 在下面添加一个图例,显示每个点的含义

  • 数据集取自,如下所示(感谢Stephen Henderson,他正确地指出我之前附加了错误的数据集-这与用于线条图的数据集相同):


    让我们看看这是否适合你(如果这是你正在寻找的)

    我已经添加了一个geom_point()层,位于与时间段列匹配的填充aes的行旁边(注意csv中的所有数据都处于相同的因子级别)。将aes设置为“填充”,然后将其设置为“形状21”,以避免与颜色aes产生混乱,因为它已经存在于前一层中的不同变量中

    库(tidyverse)
    图书馆(韦斯安德森)
    df%>%
    ggplot()+
    几何线范围(aes(ymin=minyear,ymax=maxyear,
    颜色=因子(饮食),
    x=fct_重新排序(因子(id)、描述(排序)),
    尺寸=1)+
    几何点(aes(x=fct\U重新排序(因子(id),描述(排序)),y=最大年份+1,填充=时间段),
    show.legend=TRUE,pch=21,color=“白色”,size=1)+
    比例颜色手册(值=wes调色板(“Cavalcanti1”))+
    实验室(x=NULL,y=NULL)+
    主题_bw()+
    coord_flip()+
    导轨(颜色=F)+
    主题(panel.grid.minor=element_blank(),
    panel.grid.major.y=元素_blank(),
    panel.grid.major.x=元素线(),
    axis.ticks=元素_blank(),
    legend.position=“底部”,
    panel.border=元素_blank(),
    legend.title=元素_blank(),
    axis.title.y=元素_blank(),
    axis.text.y=元素_blank(),
    axis.ticks.y=元素_blank(),
    plot.title=元素\文本(大小=20,vjust=1,hjust=0),
    axis.text=元素\文本(大小=16),
    axis.title=元素\文本(大小=20))
    
    Hi Aaumai,谢谢你的帮助,效果很好!刚刚尝试过这个,我意识到它看起来有点混乱,所有的点在不同的点-你认为有可能把它们都放在最后(最右边)?你可以在geom_point玩y aes。如果将其设置为max(maxyear),它们将向右对齐。我只是尝试使用不同的值,看看什么看起来更好。当然,对不起,我没有想清楚-它工作得很好!
    # A tibble: 200 x 18
       decimal.latitude decimal.longitu~ class species.name id    duration minyear maxyear
                  <dbl>            <dbl> <chr> <chr>        <fct>    <dbl>   <dbl>   <dbl>
     1            -54.6             159. Aves  Aptenodytes~ 2283        10    1970    1980
     2            -43.0             147. Aves  Larus domin~ 8990        28    1980    2008
     3            -43.0             147. Aves  Larus novae~ 8992        25    1983    2008
     4            -43.0             147. Aves  Larus pacif~ 8991        28    1980    2008
     5            -42.9             147. Aves  Calidris fe~ 8940        33    1974    2007
     6            -42.9             147. Aves  Calidris ru~ 8942        34    1974    2008
     7            -42.9             147. Aves  Limosa lapp~ 8939        34    1974    2008
     8            -42.9             147. Aves  Numenius ma~ 8941        34    1974    2008
     9            -42.9             147. Aves  Tringa nebu~ 8938        34    1974    2008
    10            -42.0             148. Aves  Numenius ma~ 12022       12    1988    2000
    # ... with 190 more rows, and 10 more variables: system <chr>, common.name <chr>,
    #   estimate <dbl>, std.error <dbl>, statistic <dbl>, p.value <dbl>, diet <fct>,
    #   mean_trend <dbl>, sort <dbl>, time_period <fct>
    
    library(tidyverse)
    library(wesanderson)    
    ggplot() +
            geom_linerange(data = bird_models_traits, aes(ymin = minyear, ymax = maxyear, 
                                                          colour = diet,
                                                          x = fct_reorder(id, desc(sort))),
                           size = 1) +
            scale_colour_manual(values = wes_palette("Cavalcanti1")) +
            labs(x = NULL, y = NULL) +
            theme_bw() +
            coord_flip() +
            guides(colour = F) +
            theme(panel.grid.minor = element_blank(),
                  panel.grid.major.y = element_blank(),
                  panel.grid.major.x = element_line(),
                  axis.ticks = element_blank(),
                  legend.position = "bottom", 
                  panel.border = element_blank(),
                  legend.title = element_blank(),
                  axis.title.y = element_blank(),
                  axis.text.y = element_blank(),
                  axis.ticks.y = element_blank(),
                  plot.title = element_text(size = 20, vjust = 1, hjust = 0),
                  axis.text = element_text(size = 16), 
                  axis.title = element_text(size = 20))