代码之家  ›  专栏  ›  技术社区  ›  Shawn Hemelstrand

如何在ggplot中的许多回归线中为一条特定回归线上色以匹配注释?

  •  0
  • Shawn Hemelstrand  · 技术社区  · 2 年前

    enter image description here

    首先,我的数据:

    structure(list(Mins_Work = c(435L, 350L, 145L, 135L, 15L, 60L, 
    60L, 390L, 395L, 395L, 315L, 80L, 580L, 175L, 545L, 230L, 435L, 
    370L, 255L, 515L, 330L, 65L, 115L, 550L, 420L, 45L, 266L, 196L, 
    198L, 220L, 17L, 382L, 0L, 180L, 343L, 207L, 263L, 332L, 0L, 
    0L, 259L, 417L, 282L, 685L, 517L, 111L, 64L, 466L, 499L, 460L, 
    269L, 300L, 427L, 301L, 436L, 342L, 229L, 379L, 102L, 146L, NA, 
    94L, 345L, 73L, 204L, 512L, 113L, 135L, 458L, 493L, 552L, 108L, 
    335L, 395L, 508L, 546L, 396L, 159L, 325L, 747L, 650L, 377L, 461L, 
    669L, 186L, 220L, 410L, 708L, 409L, 515L, 413L, 166L, 451L, 660L, 
    177L, 192L, 191L, 461L, 637L, 297L, 601L, 586L, 270L, 479L, 0L, 
    480L, 397L, 174L, 111L, 0L, 610L, 332L, 345L, 423L, 160L, 611L, 
    0L, 345L, 550L, 324L, 427L, 505L, 632L, 560L, 230L, 495L, 235L, 
    522L, 654L, 465L, 377L, 260L, 572L, 612L, 594L, 624L, 237L, 0L, 
    38L, 409L, 634L, 292L, 706L, 399L, 568L, 0L, 694L, 298L, 616L, 
    553L, 581L, 423L, 636L, 623L, 338L, 345L, 521L, 438L, 504L, 600L, 
    616L, 656L, 285L, 474L, 688L, 278L, 383L, 535L, 363L, 470L, 457L, 
    303L, 123L, 363L, 329L, 513L, 636L, 421L, 220L, 430L, 428L, 536L, 
    156L, 615L, 429L, 103L, 332L, 250L, 281L, 248L, 435L, 589L, 515L, 
    158L, 0L, 649L, 427L, 193L, 225L, 0L, 280L, 163L, 536L, 301L, 
    406L, 230L, 519L, 0L, 303L, 472L, 392L, 326L, 368L, 405L, 515L, 
    308L, 259L, 769L, 93L, 517L, 261L, 420L, 248L, 265L, 834L, 313L, 
    131L, 298L, 134L, 385L, 648L, 529L, 487L, 533L, 641L, 429L, 339L, 
    508L, 560L, 439L, 381L, 397L, 692L, 534L, 148L, 366L, 167L, 425L, 
    315L, 476L, 384L, 498L, 502L, 308L, 360L, 203L, 410L, 626L, 593L, 
    409L, 531L, 157L, 0L, 357L, 443L, 615L, 564L, 341L, 352L, 609L, 
    686L, 386L, 323L, 362L, 597L, 325L, 51L, 570L, 579L, 284L, 0L, 
    530L, 171L, 640L, 263L, 112L, 217L, 152L, 203L, 394L, 135L, 234L, 
    507L, 224L, 174L, 210L, 138L, 52L, 326L, 413L, 695L, 370L, 256L, 
    327L, 490L, 128L, 469L, 567L, 359L, 561L, 478L, 233L, 550L, 390L
    ), Coffee_Cups = c(3L, 0L, 2L, 6L, 4L, 5L, 3L, 3L, 2L, 2L, 3L, 
    1L, 1L, 3L, 2L, 2L, 0L, 1L, 1L, 4L, 4L, 3L, 0L, 1L, 3L, 0L, 0L, 
    0L, 0L, 2L, 0L, 1L, 2L, 3L, 2L, 2L, 4L, 3L, 6L, 6L, 3L, 4L, 6L, 
    8L, 3L, 5L, 0L, 2L, 2L, 8L, 6L, 4L, 6L, 4L, 4L, 2L, 6L, 6L, 5L, 
    1L, 3L, 1L, 5L, 4L, 6L, 5L, 0L, 6L, 6L, 4L, 4L, 2L, 2L, 6L, 6L, 
    7L, 3L, 3L, 0L, 5L, 7L, 6L, 3L, 5L, 3L, 3L, 1L, 9L, 9L, 3L, 3L, 
    6L, 6L, 6L, 3L, 0L, 7L, 6L, 6L, 3L, 9L, 3L, 8L, 8L, 3L, 3L, 7L, 
    6L, 3L, 3L, 3L, 6L, 6L, 6L, 1L, 9L, 3L, 3L, 2L, 6L, 3L, 6L, 9L, 
    6L, 8L, 9L, 6L, 6L, 6L, 0L, 3L, 0L, 3L, 3L, 6L, 3L, 0L, 9L, 3L, 
    0L, 2L, 0L, 6L, 6L, 6L, 3L, 6L, 3L, 9L, 3L, 0L, 0L, 6L, 3L, 3L, 
    3L, 3L, 6L, 0L, 6L, 3L, 3L, 5L, 5L, 3L, 0L, 6L, 4L, 2L, 0L, 2L, 
    4L, 0L, 6L, 4L, 4L, 2L, 2L, 0L, 9L, 6L, 3L, 6L, 6L, 9L, 0L, 6L, 
    6L, 6L, 6L, 6L, 6L, 3L, 3L, 0L, 9L, 6L, 3L, 6L, 3L, 6L, 1L, 6L, 
    6L, 6L, 6L, 6L, 1L, 3L, 9L, 6L, 3L, 6L, 9L, 3L, 5L, 6L, 3L, 0L, 
    6L, 3L, 3L, 5L, 0L, 6L, 3L, 5L, 3L, 0L, 6L, 7L, 3L, 6L, 6L, 6L, 
    6L, 3L, 5L, 6L, 7L, 6L, 6L, 4L, 6L, 4L, 5L, 5L, 6L, NA, 8L, 6L, 
    6L, 6L, 9L, 3L, 3L, 9L, 7L, 8L, 4L, 3L, 3L, 3L, 6L, 6L, 6L, 3L, 
    4L, 3L, 3L, 6L, 4L, 3L, 3L, 4L, 6L, 0L, 3L, 6L, 4L, 3L, 3L, 7L, 
    4L, 4L, 3L, 1L, 6L, 4L, 6L, 5L, 3L, 6L, 6L, 3L, 6L, 3L, 5L, 6L, 
    6L, 3L, 6L, 4L, 9L, 7L, 6L, 3L, 3L, 3L, 4L, 6L, 3L, 6L, 3L), 
        Month_Name = c("September", "September", "September", "September", 
        "September", "September", "September", "September", "September", 
        "September", "September", "September", "September", "September", 
        "September", "September", "September", "September", "September", 
        "September", "September", "September", "September", "September", 
        "September", "September", "September", "September", "September", 
        "September", "October", "October", "October", "October", 
        "October", "October", "October", "October", "October", "October", 
        "October", "October", "October", "October", "October", "October", 
        "October", "October", "October", "October", "October", "October", 
        "October", "October", "October", "October", "October", "October", 
        "October", "October", "October", "November", "November", 
        "November", "November", "November", "November", "November", 
        "November", "November", "November", "November", "November", 
        "November", "November", "November", "November", "November", 
        "November", "November", "November", "November", "November", 
        "November", "November", "November", "November", "November", 
        "November", "November", "November", "December", "December", 
        "December", "December", "December", "December", "December", 
        "December", "December", "December", "December", "December", 
        "December", "December", "December", "December", "December", 
        "December", "December", "December", "December", "December", 
        "December", "December", "December", "December", "December", 
        "December", "December", "December", "December", "January", 
        "January", "January", "January", "January", "January", "January", 
        "January", "January", "January", "January", "January", "January", 
        "January", "January", "January", "January", "January", "January", 
        "January", "January", "January", "January", "January", "January", 
        "January", "January", "January", "January", "January", "January", 
        "February", "February", "February", "February", "February", 
        "February", "February", "February", "February", "February", 
        "February", "February", "February", "February", "February", 
        "February", "February", "February", "February", "February", 
        "February", "February", "February", "February", "February", 
        "February", "February", "February", "March", "March", "March", 
        "March", "March", "March", "March", "March", "March", "March", 
        "March", "March", "March", "March", "March", "March", "March", 
        "March", "March", "March", "March", "March", "March", "March", 
        "March", "March", "March", "March", "March", "March", "March", 
        "April", "April", "April", "April", "April", "April", "April", 
        "April", "April", "April", "April", "April", "April", "April", 
        "April", "April", "April", "April", "April", "April", "April", 
        "April", "April", "April", "April", "April", "April", "April", 
        "April", "April", "May", "May", "May", "May", "May", "May", 
        "May", "May", "May", "May", "May", "May", "May", "May", "May", 
        "May", "May", "May", "May", "May", "May", "May", "May", "May", 
        "May", "May", "May", "May", "May", "May", "May", "June", 
        "June", "June", "June", "June", "June", "June", "June", "June", 
        "June", "June", "June", "June", "June", "June", "June", "June", 
        "June", "June", "June", "June", "June", "June", "June", "June", 
        "June", "June", "June", "June", "June", "July", "July", "July", 
        "July", "July", "July", "July", "July", "July", "July", "July"
        )), class = "data.frame", row.names = c(NA, -314L))
    

    到目前为止,我的情节大致如下:

    ggplot(slack.work,
           aes(x=Coffee_Cups,
               y=Mins_Work,
               color=Month_Name))+
      geom_point(alpha = .4)+
      geom_smooth(method = "lm",
                  se = F)+
      scale_colour_viridis_d()+
      annotate("text",
               x=3,
                y=800,
                label="(Month Name) had the strongest effect on productivity.",
               size = 4,
               color="steelblue")+
      theme_bw()+
      labs(title = "Coffee Cups x Minutes of Productivity",
           subtitle = "Pearson r = .30, p < .001",
           x="Cups of Coffee",
           y="Minutes of Work",
           color="Month")+
      theme(plot.title = element_text(face = "bold",
                                      size = 15,
                                      family = "mono"),
            plot.subtitle = element_text(face = "italic"))
    

    enter image description here

    annotate 地块的一部分。其他回归线都可以是另一种通用颜色。任何帮助都将不胜感激。

    1 回复  |  直到 2 年前
        1
  •  2
  •   stefan    2 年前

    当然有 gghighlight 包裹但是使用“just” ggplot2 color aes,例如。 Month_Name == "January" 并通过 scale_color_manual . 此外,您必须显式映射 Month_Name group aes仍然可以得到每个月的回归线。此外,为了突出显示月份的行,我只使用了第二个 geom_smooth 图层:

    library(ggplot2)
    
    ggplot(
      slack.work,
      aes(
        x = Coffee_Cups,
        y = Mins_Work,
        group = Month_Name,
        color = Month_Name == "January"
      )
    ) +
      geom_point(alpha = .4) +
      geom_smooth(
        data = ~subset(.x, !Month_Name == "January"),
        method = "lm",
        se = F
      ) +
      geom_smooth(
        data = ~subset(.x, Month_Name == "January"),
        method = "lm",
        se = F
      ) +
      scale_colour_manual(values = c("TRUE" = "steelblue", "FALSE" = "grey65")) +
      annotate("text",
        x = 3,
        y = 800,
        label = "January had the strongest effect on productivity.",
        size = 4,
        color = "steelblue"
      ) +
      theme_bw() +
      labs(
        title = "Coffee Cups x Minutes of Productivity",
        subtitle = "Pearson r = .30, p < .001",
        x = "Cups of Coffee",
        y = "Minutes of Work",
        color = "Month"
      ) +
      theme(
        plot.title = element_text(
          face = "bold",
          size = 15,
          family = "mono"
        ),
        plot.subtitle = element_text(face = "italic")
      ) +
      guides(color = "none")
    

    enter image description here

        2
  •  1
  •   Shafee ikashnitsky    2 年前

    gghighlight

    library(ggplot2)
    library(gghighlight)
    
    
    ggplot(slack.work,
           aes(x=Coffee_Cups,
               y=Mins_Work,
               color=Month_Name))+
      geom_point()+
      geom_smooth(method = "lm",
                  se = F)+
      gghighlight(Month_Name == "January",
      unhighlighted_params = list(size = 1, colour = alpha("pink", 0.5))
      ) +
      scale_color_manual(values = "steelblue") +
      annotate("text",
               x=3,
               y=800,
               label="(January) had the strongest effect on productivity.",
               size = 4,
               color="steelblue")+
      theme_bw()+
      labs(title = "Coffee Cups x Minutes of Productivity",
           subtitle = "Pearson r = .30, p < .001",
           x="Cups of Coffee",
           y="Minutes of Work",
           color="Month")+
      theme(plot.title = element_text(face = "bold",
                                      size = 15,
                                      family = "mono"),
            plot.subtitle = element_text(face = "italic"))
    
    
    

    enter image description here