【问题标题】:Set ylim while labeling breaks在标记中断时设置 ylim
【发布时间】:2022-01-04 15:39:53
【问题描述】:

我有这样的数据:

df<-structure(list(PreConfidenceMarginal = c(1, 1, 1, 3, 3, 4, 4, 
4, 4, 4, 2, 1, 1, 1, 2, 3, 2, 1), PostConfidenceMarginal = c(2, 
2, 2, 4, 4, 4, 4, 4, 5, 4, 3, 3, 1, 3, 4, 3, 3, 3), NoMarginalRepairs = c(TRUE, 
TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, TRUE, TRUE, FALSE, FALSE, FALSE, TRUE, TRUE)), row.names = c(NA, 
-18L), class = c("tbl_df", "tbl", "data.frame"))

我已经用它制作了这个图表:

df%>%pivot_longer(!NoMarginalRepairs, names_to = "Time", values_to = "Value")%>%group_by(Time,NoMarginalRepairs)%>%summarize(Mean=mean(Value),SD=sd(Value, na.rm = TRUE))%>%mutate(Time=as.factor(Time))%>%mutate(Time=fct_recode(Time,"Pre-Workshop"="PreConfidenceMarginal","Post-Workshop"="PostConfidenceMarginal"))%>%mutate(Time = factor(Time, levels = c("Pre-Workshop", "Post-Workshop")))%>%ggplot(aes(x=Time,y=Mean,color=NoMarginalRepairs,group=NoMarginalRepairs))+geom_point()+geom_line()+labs(color="Has not repaired any marginal eyelid lacerations",title = "Degree of Improvement", subtitle = "Repairing Marginal Lid Laceration" , y= "Confidence Level")+scale_y_continuous(breaks = c(1, 2, 3, 4,5),labels = c("1. Poor", "2. Fair", "3. Good", "4. Very Good", "5. Excellent"))

看起来很棒,主要是我想要的。话虽如此,我希望 y 轴从 1 变为至少 4,而当我尝试使用 ylim 进行此操作时,我遇到了麻烦。

当我只使用 ylim() 而不是自定义中断和标签时,效果很好:

df%>%pivot_longer(!NoMarginalRepairs, names_to = "Time", values_to = "Value")%>%group_by(Time,NoMarginalRepairs)%>%summarize(Mean=mean(Value),SD=sd(Value, na.rm = TRUE))%>%mutate(Time=as.factor(Time))%>%mutate(Time=fct_recode(Time,"Pre-Workshop"="PreConfidenceMarginal","Post-Workshop"="PostConfidenceMarginal"))%>%mutate(Time = factor(Time, levels = c("Pre-Workshop", "Post-Workshop")))%>%ggplot(aes(x=Time,y=Mean,color=NoMarginalRepairs,group=NoMarginalRepairs))+geom_point()+geom_line()+labs(color="Has not repaired any marginal eyelid lacerations",title = "Degree of Improvement", subtitle = "Repairing Marginal Lid Laceration" , y= "Confidence Level")+ylim(1,4)

但是当我尝试在我的代码中同时包含这两者时,它就搞砸了:

df%>%filter(!is.na(NoMarginalRepairs))%>%select(PreConfidenceMarginal,PostConfidenceMarginal,NoMarginalRepairs)%>%pivot_longer(!NoMarginalRepairs, names_to = "Time", values_to = "Value")%>%group_by(Time,NoMarginalRepairs)%>%summarize(Mean=mean(Value),SD=sd(Value, na.rm = TRUE))%>%mutate(Time=as.factor(Time))%>%mutate(Time=fct_recode(Time,"Pre-Workshop"="PreConfidenceMarginal","Post-Workshop"="PostConfidenceMarginal"))%>%mutate(Time = factor(Time, levels = c("Pre-Workshop", "Post-Workshop")))%>%ggplot(aes(x=Time,y=Mean,color=NoMarginalRepairs,group=NoMarginalRepairs))+geom_point()+geom_line()+labs(color="Has not repaired any marginal eyelid lacerations",title = "Degree of Improvement", subtitle = "Repairing Marginal Lid Laceration" , y= "Confidence Level")+scale_y_continuous(breaks = c(1, 2, 3, 4,5),labels = c("1. Poor", "2. Fair", "3. Good", "4. Very Good", "5. Excellent"))+ylim(1,4)

它告诉了我原因(这很有意义):

“'y' 的比例已经存在。为 'y' 添加另一个比例,它将替换现有的比例。”

但是我该如何做到这两点呢?更改数据上的标签,同时确保规模够大?

【问题讨论】:

    标签: ggplot2


    【解决方案1】:

    您可以通过scale_y_continuouslimits 参数设置限制:

    library(tidyverse)
    
    df_long <- df %>%
      pivot_longer(!NoMarginalRepairs, names_to = "Time", values_to = "Value") %>%
      group_by(Time, NoMarginalRepairs) %>%
      summarize(Mean = mean(Value), SD = sd(Value, na.rm = TRUE)) %>%
      mutate(Time = as.factor(Time)) %>%
      mutate(Time = fct_recode(Time, "Pre-Workshop" = "PreConfidenceMarginal", "Post-Workshop" = "PostConfidenceMarginal")) %>%
      mutate(Time = factor(Time, levels = c("Pre-Workshop", "Post-Workshop"))) 
    
    ggplot(df_long, aes(x = Time, y = Mean, color = NoMarginalRepairs, group = NoMarginalRepairs)) +
      geom_point() +
      geom_line() +
      labs(color = "Has not repaired any marginal eyelid lacerations", 
           title = "Degree of Improvement", 
           subtitle = "Repairing Marginal Lid Laceration", 
           y = "Confidence Level") +
      scale_y_continuous(breaks = c(1, 2, 3, 4, 5), 
                         labels = c("1. Poor", "2. Fair", "3. Good", "4. Very Good", "5. Excellent"), 
                         limits = c(1, 4))
    

    【讨论】:

      猜你喜欢
      • 2015-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-18
      • 2015-03-21
      • 2019-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多