【问题标题】:Legend not visible when using a secondary axis in ggplot在 ggplot 中使用辅助轴时图例不可见
【发布时间】:2020-12-08 14:43:11
【问题描述】:

我有一个使用 ggplot 绘制的 3 列数据框。我需要主轴和次轴,因为第二列中的数字远大于第一列中的数字。

 df_q
# A tibble: 205 x 3
   Days_From_First_Use Average_Response N_subjects
   <drtn>                         <dbl>      <int>
 1 0 days                          4.96         37
 2 1 days                          4.24         33
 3 2 days                          4.12         31
 4 3 days                          3.90         33
 5 4 days                          4.48         30
 6 5 days                          4.06         29
 7 6 days                          3.69         25
 8 7 days                          4.41         26
 9 8 days                          4.97         25
10 9 days                          4.54         26
# ... with 195 more rows

我将第 2 列(主要 y 轴)和第 3 列(次要 y 轴)与第 1 列(x 轴)绘制如下:

beta <- 1 / round ( max(df_q["N_subjects"]) / 10, 0)

plt <- df_q %>% 
         ggplot(aes(x = as.numeric(Days_From_First_Use), y = Average_Response)) +
         geom_line(linetype = 1, color = "red4", size = 1) +
         geom_line(aes(y = beta * N_subjects), linetype = 12, color = "forestgreen", size = 1) +
         scale_y_continuous( "Average Response Across All Subjects", 
                             limits = c(0, 10), breaks = c(1, 3, 4, 6, 7, 9),
                             sec.axis = sec_axis(~ ./ beta, name = "Number of Responses")) +
         labs(title = "Average Score and Number of Subjects vs Day From First Use", 
              x = "Days From First Use") +
         theme(plot.title = element_text(size = 16, face = "bold", hjust = 0.5),
               axis.title.x = element_text(size = 14, face = "bold"),
               axis.title.y = element_text(size = 14, face = "bold"), 
               legend.title = element_text(size = 14, face = "bold"),
               legend.position = "right")      

# Need to show(plt) to make it visible in RStudio
show(plt)

不幸的是,没有可见的图例,我所有让它可见的尝试都失败了。我认为它与次要 y 轴有关,因为当我只有一个主要 y 轴时,图例是可见的。我将不胜感激有关我需要做什么以使其可见的一些指导。

在此致以诚挚的谢意

托马斯·飞利浦

【问题讨论】:

    标签: r ggplot2 dplyr


    【解决方案1】:

    尝试在aes() 中传递colorlinetype 语句:

    library(tidyverse)
    #Code
    beta <- 1 / round ( max(df_q["N_subjects"]) / 10, 0)
    #Plot
    df_q %>%
      mutate(Days_From_First_Use=parse_number(Days_From_First_Use)) %>%
      ggplot(aes(x = as.numeric(Days_From_First_Use), y = Average_Response)) +
      geom_line(size = 1,aes(color='Average_Response',linetype = 'Average_Response')) +
      geom_line(aes(y = beta * N_subjects,color='Number of responses',
                    linetype = 'Number of responses') , size = 1) +
      scale_y_continuous( "Average Response Across All Subjects", 
                          limits = c(0, 10), breaks = c(1, 3, 4, 6, 7, 9),
                          sec.axis = sec_axis(~ ./ beta, name = "Number of Responses")) +
      labs(title = "Average Score and Number of Subjects vs Day From First Use", 
           x = "Days From First Use") +
      theme(plot.title = element_text(size = 16, face = "bold", hjust = 0.5),
            axis.title.x = element_text(size = 14, face = "bold"),
            axis.title.y = element_text(size = 14, face = "bold"), 
            legend.title = element_text(size = 14, face = "bold"),
            legend.position = "right")+
      scale_color_manual(values=c("red4","forestgreen"))+
      scale_linetype_manual(values = c(1,12))+
      labs(color='var',linetype='var')
    

    输出:

    使用的一些数据:

    #Data
    df_q <- structure(list(Days_From_First_Use = c("0 days", "1 days", "2 days", 
    "3 days", "4 days", "5 days", "6 days", "7 days", "8 days", "9 days"
    ), Average_Response = c(4.96, 4.24, 4.12, 3.9, 4.48, 4.06, 3.69, 
    4.41, 4.97, 4.54), N_subjects = c(37L, 33L, 31L, 33L, 30L, 29L, 
    25L, 26L, 25L, 26L)), class = "data.frame", row.names = c(NA, 
    -10L))
    

    【讨论】:

    • 完美!非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    • 2020-11-29
    • 2021-03-14
    • 1970-01-01
    • 2020-11-26
    • 2019-05-24
    相关资源
    最近更新 更多