【问题标题】:using position_dodge with geom_line将 position_dodge 与 geom_line 一起使用
【发布时间】:2019-02-19 22:25:34
【问题描述】:

我的问题与这个question 密切相关,但是是后续问题,而不是重复问题。我的绘图问题与使用 postion_dodge() 和 geom_line() 有关。

数据:

Behaviour Repeatability       UCI       LCI Age stage
Activity     0.1890000 0.2470000 0.1600000  PE     A
Activity     0.5500000 0.7100000 0.3900000  PW     B
Activity     0.5100000 0.6300000 0.4000000   A     D
Activity     0.4100000        NA        NA  A2     D #NAs are real & important
Activity     0.4229638 0.4561744 0.3854906  A1     D
Activity     0.4660000 0.5910000 0.2320000 PW2     B
Activity     0.1812492 0.2111999 0.1522250  CY     C
Aggression   0.2620000 0.3030000 0.1960000  PE     A
Aggression   0.3700000 0.3800000 0.3600000  PW     B
Aggression   0.4400000 0.5600000 0.3300000   A     D
Aggression   0.3740000        NA        NA  A2     D #NAs are real & important
Aggression   0.3212115 0.3471766 0.2801818  A1     D
Aggression   0.0461000 0.0995000 0.0158000 PW2     B
Aggression   0.5106432 0.5635857 0.4634950  CY     C

只有相关的ggplot 代码:

pd <- position_dodge(0.3)

my_colors <- 
   tibble(color = c("orange", "black", "red", "black", "black", "pink", "black"), 
   Age = c("A","A1","A2", "CY", "PE","PW", "PW2"))

ggplot(rep, aes(x = stage, y = Repeatability, shape = Behaviour, colour=Age)) + 
    geom_point(
        position = position_dodge(width = 0.3), 
        size = 3) + 
    geom_line(
        aes(group=Behaviour), 
        position = position_dodge(width = 0.3), 
        data = function(x) inner_join(x, my_colors %>% filter(color == 'black')))+
    scale_colour_manual(
        values = c("orange", "black", "red", "black", "black", "pink", "black"), 
        name = "Study", 
        breaks=c("A","A1","A2", "CY", "PE","PW", "PW2"))+
    geom_errorbar(
        aes(ymin=LCI, ymax=UCI), 
        position=pd, 
        width=0.1, 
        size=0.5)

这是我得到的情节:

如何移动 geom_line() 使其穿过黑点?(而不是介于黑点和粉点之间。)

我在geom_point() 和geom_line() 代码中都包含了position = position_dodge(width = 0.3) 参数,但它不适用于geom_line()。

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    只需将group = Behaviour 移动到ggplot(..., aes(..., group = Behaviour))。

    ggplot(rep, aes(x = stage, y = Repeatability, shape = Behaviour, colour=Age, group = Behaviour)) +
        geom_point(
            position = position_dodge(width = 0.3),
            size = 3) +
        geom_line(
            position = position_dodge(width = 0.3),
            data = function(x) inner_join(x, my_colors %>% filter(color == 'black')))+
        scale_colour_manual(
            values = c("orange", "black", "red", "black", "black", "pink", "black"),
            name = "Study",
            breaks=c("A","A1","A2", "CY", "PE","PW", "PW2"))+
        geom_errorbar(
            aes(ymin=LCI, ymax=UCI),
            position=pd,
            width=0.1,
            size=0.5)
    


    好的,这是另一种选择。这个想法是使用jitter 预先计算躲避的位置。这会将分类变量stage 转换为连续变量stage.jitter,这需要通过scale_x_continuous 手动指定x 轴标签。

    rep %>%
        mutate(stage.jitter = jitter(as.numeric(stage), 0.5)) %>%
        ggplot(aes(x = stage.jitter, y = Repeatability, shape = Behaviour, colour=Age, group = Behaviour)) +
            geom_point(size = 3) +
            geom_line(
                data = function(x) inner_join(x, my_colors %>% filter(color == 'black')))+
            scale_colour_manual(
                values = c("orange", "black", "red", "black", "black", "pink", "black"),
                name = "Study",
                breaks=c("A","A1","A2", "CY", "PE","PW", "PW2")) +
            scale_x_continuous(
                "stage",
                labels = function(x) rep %>% pull(stage) %>% levels() %>% .[x]) +
            geom_errorbar(
                aes(ymin = LCI, ymax = UCI),
                width = 0.1,
                size = 0.5)
    

    您可能需要通过更改 jitter 中的 factor 值来调整抖动量。

    【讨论】:

    • 这是一个小细节,但我注意到在您的图中,不同颜色的点(带有 SE 条)都彼此一致,而在我上面的图中,它们都被偏移以便于查看。有没有办法让线穿过黑点,同时也保留position_dodge() 的点?
    • 如果无法偏移点以便于可视化,是否有办法将彩色点放在前面(并将黑色点移到后面)?
    • 嗨@BlunderingEcologist;我明白你的意思,但我不确定是否有一个简单的解决方法。我们需要group 美学来绘制线条(因为x 是一个分类变量)并匹配躲避的点。但是group 美学也会导致点(和线)被Behaviour 躲避(而不是像以前那样单独)。一旦我有机会再玩这个游戏,如果我想出一些东西,我会更新。
    • 那将不胜感激。我一直在努力查看是否可以更改颜色的叠加顺序(像其他人一样,下面的链接),但我遇到了您在group 美学中指出的问题。提及的链接:stackoverflow.com/questions/21120088/… 和 stackoverflow.com/questions/43784425/…
    • 抖动选项似乎是解决我的问题的好方法。再次感谢您的编辑!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-17
    • 2020-02-05
    • 2021-08-06
    • 1970-01-01
    • 2015-10-19
    • 1970-01-01
    相关资源
    最近更新 更多