如何在此自定义facet_wrap中添加geom_quantile图例? [英] How can I add a geom_quantile legend to this customized facet_wrap?

查看:47
本文介绍了如何在此自定义facet_wrap中添加geom_quantile图例?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我最近

由以下代码产生

  cols = c(#E1B930",#2C77BF",#E38072",#6DBCC3")ggplot(p,aes(x = n.fjernet,y = os.neck))+ geom_point(aes(color = uiccc),shape = 20,size = 5,alpha = 0.7)+geom_quantile(quantiles = 0.5,col ="black",size = 1,linetype = 2,show.legend = F)+ facet_wrap(.〜factor(uiccc))+scale_fill_manual(values = cols)+scale_colour_manual(values = cols)+scale_x_continuous(breaks = seq(0,50,by = 10),name =淋巴结产率")+scale_y_continuous(name =死亡时间(月)")+主题(strip.background = element_blank(),strip.text = element_text(color ="transparent"),axis.title.x = element_text(color = "grey20", size = 14, face="bold", margin=ggplot2::margin(t=10)),axis.title.y = element_text(color ="grey20",size = 14,face ="bold",margin = ggplot2 :: margin(r = 10)),legend.position ="none",plot.margin = unit(c(1,3,1,1),"lines"))+coord_cartesian(clip ="off",ylim = c(0,175))+geom_text(data =.%>%distinct(uiccc),aes(label = factor(uiccc),color = uiccc),y = 190,x = 30,hjust = 0.5,fontface ="bold",cex = 5) 

我希望该图上有一个图例,该图例表示第50个百分位数",如 geom_quantile()中的 linetype = 2 所示,它看起来像这(手动添加在photoshop中):

首先:我删除了 theme(legend.position ="none")

第二:我在 geom_quantile

中添加了 show.legend = TRUE

第三:我在 geom_point

中添加了 show.legend = FALSE

不幸的是,这些编辑不会产生所需的图例:

我该如何进行?

我的数据 p

  p<-结构(list(n.fjernet = c(18L,11L,14L,15L,9L,6L,3L,16L,4L,6L,10L,13L,33L,16L,6L,9L,23L,9L,8L,13L,5L,30L,25L,3L,9L,9L,12L,7L,38L,5L,7L,15L,4L,6L,15L,9L,8L,7L,4L,6L,10L,8L,4L,9L,10L,14L,14L,3L,4L,6L,6L,20L,3L,26L,13L,13L,13L,13L,3L,7L,6L,5L,10L,15L,29L,7L,6L,11L,17L,14L,18L,22L,9L,20L,34L,9L,8L,8L,11L,3L,4L,4L,5L,3L,2L,8L,5L,18L,7L,9L,13L,18L,19L,14L,46L,23L,11L,6L,18L,20L,4L,2L,7L,7L,4L,11L,13L,13L,9L,9L,9L,12L,11L,16L,6L,13L,8L,17L,5L,8L,22L,19L,3L,15L,14L,7L,18L,9L,10L,18L,24L,11L,15L,7L,6L,4L,24L,23L,8L,20L,9L,22L,11L,2L,24L,15L,5L,8L,11L,11L,11L,15L,6L,16L,7L,9L,16L,11L,33L,27L,16L,57L,5L,7L,8L,11L,15L,15L,12L,5L,9L,49L,11L,28L,19L,13L,23L,11L,12L,10L,4L,14L,6L,12L,32L,13L,12L,4L,11L,17L,10L,5L,15L,21L,19L,11L,31L,9L,20L,11L,16L,12L,6L,16L,27L,30L,18L,18L,10L,7L,23L,16L,15L,4L,12L,9L,10L,11L,7L,8L,8L,7L,6L,9L,9L,13L,15L,12L,35L,12L,5L,19L,27L,34L,10L,16L,18L,6L,22L),颈围= c(11.5,74.38、17.02、7.89、96.03、40.48、17.74、14.65、62.46、12.55,9.92、26.05、45.47、17.38、39.72、51.45、8.61、76.98、67.09,94.79、72.15、93.93、17.05、12.48、91.6、15.87、11.04、67.22,67.02、8.94、6.6、5.09、10.68、17.15、0.07、5.19、40.77、0.2,170.88、5.55、1.61、38.28、10.58、32.99、110.98、103.69、122.32,14.78、42.74、4.04、8.28、84.96、11.7、49.97、120.48、52.6、71.26,16.3、100.14、55.03、6.51、89.89、51.71、24.97、55.66、21.91,81.48、30.92、1.58、7.52、30.75、3.45、19.22、5.42、17.68、45.54,76.22、125.34、83.62、30.82、90.32、1.84、19.98、20.53、32.59,54.77、2.3、106.84、22.28、45.18、4.47、39.66、32.3、16.23、3.88,2.23、0.23、18.73、0.79、28.75、79.54、14.46、15.15、54.97、48.59,34.83、58.42、35.29、45.73、57.53、63.11、65.05、29.54、77.21,63.48、83.35、34.3、64.49、29.54、62.69、21.62、49.35、99.02,15.8、41.89、12.98、13.8、43.6、57.23、31.38、70.74、39.46、20.76,67.22、127.15、74.12、1.97、7.39、25.17、28.22、14、36.53、20.83,19.55、40.77、27.76、45.31、34.46、35.55、26.94、9.43、10.51,6.8、8.18、8.02、14.29、6.11、13.8、4.9、4.04、14.82、11.66,73.07, 92.91, 99.98, 10.64, 10.05, 95.8, 7.23, 12.81, 43.99,13.9、10.25、16.36、18.2、18.76、12.32、8.64、11.79、112.04,70.97、31.28、28.85、21.49、19.94、22.14、29.44、67.62、11.01,45.24、110.72、20.24、14.06、12.88、31.51、8.08、13.08、21.45,24.28、21.98、32.89、23.26、15.41、15.41、13.8、40.12、8.02,15.77、49.81、18.17、24.21、47.08、6.6、37.16、13.01、8.38、14.36,18.27、17.28、73.76、68.21、22.83、2.66、69.06、17.05、8.61,23.33、13.34、12.65、8.77、128.92、16.1、4.99、11.73、22.97,40.12,20.37,2.04,45.73),uiccc = structure(c(4L,3L,3L,2L,2L,2L,2L,4L,1L,1L,2L,1L,4L,2L,1L,2L,3L,1L,2L,3L,2L,1L,2L,3L,2L,4L,1L,1L,2L,4L,4L,1L,3L,3L,4L,3L,1L,4L,2L,3L,4L,4L,4L,3L,2L,4L,1L,4L,2L,4L,4L,2L,4L,4L,1L,4L,2L,3L,2L,2L,3L,2L,4L,4L,2L,2L,3L,1L,4L,4L,4L,4L,4L,3L,2L,2L,2L,2L,2L,1L,1L,2L,1L,1L,1L,1L,4L,2L,4L,1L,2L,1L,1L,3L,3L,4L,4L,4L,4L,4L,4L,2L,3L,3L,4L,1L,1L,3L,1L,4L,2L,1L,3L,1L,2L,1L,1L,4L,1L,1L,4L,1L,1L,3L,2L,2L,1L,4L,4L,4L,4L,1L,1L,1L,2L,2L,4L,4L,2L,3L,4L,2L,4L,1L,1L,3L,3L,1L,1L,3L,4L,4L,2L,4L,4L,3L,4L,4L,4L,4L,4L,4L,3L,2L,2L,4L,3L,1L,4L,3L,4L,4L,3L,1L,4L,4L,4L,4L,2L,2L,4L,4L,1L,4L,4L,2L,4L,4L,4L,3L,4L,3L,3L,4L,4L,2L,4L,4L,2L,4L,4L,4L,4L,1L,4L,4L,3L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,2L,3L,1L,2L,1L,2L,2L,4L,4L,4L,4L,4L,4L,1L,3L,4L,4L,1L,3L,3L,4L,3L),. Label = c("UICC Stage I","UICC阶段II","UICC阶段III","UICC阶段IV"),类=因数")),row.names = c(NA,-239L),类="data.frame") 

解决方案

一种可能的解决方案是在 aes 中指定假" color 标题geom_quantile .

然后,您可以通过在相应的 geom 中添加 show.legend = FALSE 并在 scale_color_manual 仅显示第50个百分位数类别的color属性.最后,在 theme 中为 legend 设置各种参数将使您达到所需的状态.

总的来说,您可以拥有这样的代码(PS: scale_fill_manual 在当前示例中是无用的):

  ggplot(p,aes(x = n.fjernet,y = os.neck))+geom_point(aes(color = uiccc),shape = 20,size = 5,alpha = 0.7,show.legend = FALSE)+geom_quantile(aes(colour ="50th percentile"),分位数= 0.5,size = 1,linetype = 2)+facet_wrap(.〜factor(uiccc))+#scale_fill_manual(values = cols)+scale_colour_manual(values = cols,breaks = c("50th percentile"),name =")+scale_x_continuous(breaks = seq(0,50,by = 10),name =淋巴结产率")+scale_y_continuous(name =死亡时间(月)")+主题(strip.background = element_blank(),strip.text = element_text(color ="transparent"),axis.title.x = element_text(color ="grey20",size = 14,face ="bold",margin = ggplot2 :: margin(t = 10)),axis.title.y = element_text(color ="grey20",size = 14,face ="bold",margin = ggplot2 :: margin(r = 10)),legend.position ="top",Legend.text=element_text(size=rel(2)),legend.key.size = unit(2,"cm"),plot.margin = unit(c(1,3,1,1),"lines"))+coord_cartesian(clip ="off",ylim = c(0,175))+geom_text(data =.%>%distinct(uiccc),aes(label = factor(uiccc),color = uiccc),y = 190,x = 30,hjust = 0.5,fontface ="bold",cex = 5,show.legend = FALSE) 

I recently received great help from SO in producing this customized facet_wrap-plot shown below.

Question: how can I add the dotted linetype used in geom_quantile(linetype=2) as legend with the text "50th percentile"?

I have sought solutions in similar questions on SO, but my question has not been answered.

My current plot looks like this

Produced with the following code

cols = c("#E1B930", "#2C77BF","#E38072","#6DBCC3")
ggplot(p, aes(x=n.fjernet,y=os.neck)) + geom_point(aes(color=uiccc),shape=20, size=5,alpha=0.7) + 

  geom_quantile(quantiles = 0.5,col="black", size=1,linetype=2, show.legend = F) + facet_wrap(.~factor(uiccc)) +

  scale_fill_manual(values=cols) + 

  scale_colour_manual(values=cols)  +

  scale_x_continuous(breaks = seq(0,50, by=10), name="Lymph nodal yield") +
  scale_y_continuous(name="Time to death (months)") +

  theme(strip.background = element_blank(),
        strip.text = element_text(color = "transparent"),
        axis.title.x = element_text(color = "grey20", size = 14, face="bold", margin=ggplot2::margin(t=10)),
        axis.title.y = element_text(color = "grey20", size = 14, face="bold", margin=ggplot2::margin(r=10)),
        legend.position="none",
        plot.margin = unit(c(1,3,1,1), "lines")) +
        coord_cartesian(clip = "off",ylim = c(0,175)) +
        geom_text(data = . %>% distinct(uiccc), 
        aes(label = factor(uiccc), color = uiccc), y = 190, x = 30, hjust = 0.5, fontface = "bold",cex=5)

I would like the plot to have a legend that indicates the "50th percentile" as demonstrated by the linetype=2 in geom_quantile(), exclusively, which looks like this (manually added in photoshop):

First: I have removed theme(legend.position="none")

Second: I have added show.legend=TRUE in geom_quantile

Third: I have added show.legend=FALSE in geom_point

Unfortunately, these edits does not produce the requested legend:

How can I proceed?

My data p

p <- structure(list(n.fjernet = c(18L, 11L, 14L, 15L, 9L, 6L, 3L, 
16L, 4L, 6L, 10L, 13L, 33L, 16L, 6L, 9L, 23L, 9L, 8L, 13L, 5L, 
30L, 25L, 3L, 9L, 9L, 12L, 7L, 38L, 5L, 7L, 15L, 4L, 6L, 15L, 
9L, 8L, 7L, 4L, 6L, 10L, 8L, 4L, 9L, 10L, 14L, 14L, 3L, 4L, 6L, 
6L, 20L, 3L, 26L, 13L, 13L, 13L, 13L, 3L, 7L, 6L, 5L, 10L, 15L, 
29L, 7L, 6L, 11L, 17L, 14L, 18L, 22L, 9L, 20L, 34L, 9L, 8L, 8L, 
11L, 3L, 4L, 4L, 5L, 3L, 2L, 8L, 5L, 18L, 7L, 9L, 13L, 18L, 19L, 
14L, 46L, 23L, 11L, 6L, 18L, 20L, 4L, 2L, 7L, 7L, 4L, 11L, 13L, 
13L, 9L, 9L, 9L, 12L, 11L, 16L, 6L, 13L, 8L, 17L, 5L, 8L, 22L, 
19L, 3L, 15L, 14L, 7L, 18L, 9L, 10L, 18L, 24L, 11L, 15L, 7L, 
6L, 4L, 24L, 23L, 8L, 20L, 9L, 22L, 11L, 2L, 24L, 15L, 5L, 8L, 
11L, 11L, 11L, 15L, 6L, 16L, 7L, 9L, 16L, 11L, 33L, 27L, 16L, 
57L, 5L, 7L, 8L, 11L, 15L, 15L, 12L, 5L, 9L, 49L, 11L, 28L, 19L, 
13L, 23L, 11L, 12L, 10L, 4L, 14L, 6L, 12L, 32L, 13L, 12L, 4L, 
11L, 17L, 10L, 5L, 15L, 21L, 19L, 11L, 31L, 9L, 20L, 11L, 16L, 
12L, 6L, 16L, 27L, 30L, 18L, 18L, 10L, 7L, 23L, 16L, 15L, 4L, 
12L, 9L, 10L, 11L, 7L, 8L, 8L, 7L, 6L, 9L, 9L, 13L, 15L, 12L, 
35L, 12L, 5L, 19L, 27L, 34L, 10L, 16L, 18L, 6L, 22L), os.neck = c(11.5, 
74.38, 17.02, 7.89, 96.03, 40.48, 17.74, 14.65, 62.46, 12.55, 
9.92, 26.05, 45.47, 17.38, 39.72, 51.45, 8.61, 76.98, 67.09, 
94.79, 72.15, 93.93, 17.05, 12.48, 91.6, 15.87, 11.04, 67.22, 
67.02, 8.94, 6.6, 5.09, 10.68, 17.15, 0.07, 5.19, 40.77, 0.2, 
170.88, 5.55, 1.61, 38.28, 10.58, 32.99, 110.98, 103.69, 122.32, 
14.78, 42.74, 4.04, 8.28, 84.96, 11.7, 49.97, 120.48, 52.6, 71.26, 
16.3, 100.14, 55.03, 6.51, 89.89, 51.71, 24.97, 55.66, 21.91, 
81.48, 30.92, 1.58, 7.52, 30.75, 3.45, 19.22, 5.42, 17.68, 45.54, 
76.22, 125.34, 83.62, 30.82, 90.32, 1.84, 19.98, 20.53, 32.59, 
54.77, 2.3, 106.84, 22.28, 45.18, 4.47, 39.66, 32.3, 16.23, 3.88, 
2.23, 0.23, 18.73, 0.79, 28.75, 79.54, 14.46, 15.15, 54.97, 48.59, 
34.83, 58.42, 35.29, 45.73, 57.53, 63.11, 65.05, 29.54, 77.21, 
63.48, 83.35, 34.3, 64.49, 29.54, 62.69, 21.62, 49.35, 99.02, 
15.8, 41.89, 12.98, 13.8, 43.6, 57.23, 31.38, 70.74, 39.46, 20.76, 
67.22, 127.15, 74.12, 1.97, 7.39, 25.17, 28.22, 14, 36.53, 20.83, 
19.55, 40.77, 27.76, 45.31, 34.46, 35.55, 26.94, 9.43, 10.51, 
6.8, 8.18, 8.02, 14.29, 6.11, 13.8, 4.9, 4.04, 14.82, 11.66, 
73.07, 92.91, 99.98, 10.64, 10.05, 95.8, 7.23, 12.81, 43.99, 
13.9, 10.25, 16.36, 18.2, 18.76, 12.32, 8.64, 11.79, 112.04, 
70.97, 31.28, 28.85, 21.49, 19.94, 22.14, 29.44, 67.62, 11.01, 
45.24, 110.72, 20.24, 14.06, 12.88, 31.51, 8.08, 13.08, 21.45, 
24.28, 21.98, 32.89, 23.26, 15.41, 15.41, 13.8, 40.12, 8.02, 
15.77, 49.81, 18.17, 24.21, 47.08, 6.6, 37.16, 13.01, 8.38, 14.36, 
18.27, 17.28, 73.76, 68.21, 22.83, 2.66, 69.06, 17.05, 8.61, 
23.33, 13.34, 12.65, 8.77, 128.92, 16.1, 4.99, 11.73, 22.97, 
40.12, 20.37, 2.04, 45.73), uiccc = structure(c(4L, 3L, 3L, 2L, 
2L, 2L, 2L, 4L, 1L, 1L, 2L, 1L, 4L, 2L, 1L, 2L, 3L, 1L, 2L, 3L, 
2L, 1L, 2L, 3L, 2L, 4L, 1L, 1L, 2L, 4L, 4L, 1L, 3L, 3L, 4L, 3L, 
1L, 4L, 2L, 3L, 4L, 4L, 4L, 3L, 2L, 4L, 1L, 4L, 2L, 4L, 4L, 2L, 
4L, 4L, 1L, 4L, 2L, 3L, 2L, 2L, 3L, 2L, 4L, 4L, 2L, 2L, 3L, 1L, 
4L, 4L, 4L, 4L, 4L, 3L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 2L, 1L, 1L, 
1L, 1L, 4L, 2L, 4L, 1L, 2L, 1L, 1L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 
4L, 2L, 3L, 3L, 4L, 1L, 1L, 3L, 1L, 4L, 2L, 1L, 3L, 1L, 2L, 1L, 
1L, 4L, 1L, 1L, 4L, 1L, 1L, 3L, 2L, 2L, 1L, 4L, 4L, 4L, 4L, 1L, 
1L, 1L, 2L, 2L, 4L, 4L, 2L, 3L, 4L, 2L, 4L, 1L, 1L, 3L, 3L, 1L, 
1L, 3L, 4L, 4L, 2L, 4L, 4L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 3L, 2L, 
2L, 4L, 3L, 1L, 4L, 3L, 4L, 4L, 3L, 1L, 4L, 4L, 4L, 4L, 2L, 2L, 
4L, 4L, 1L, 4L, 4L, 2L, 4L, 4L, 4L, 3L, 4L, 3L, 3L, 4L, 4L, 2L, 
4L, 4L, 2L, 4L, 4L, 4L, 4L, 1L, 4L, 4L, 3L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 2L, 3L, 1L, 2L, 1L, 2L, 2L, 4L, 4L, 4L, 4L, 
4L, 4L, 1L, 3L, 4L, 4L, 1L, 3L, 3L, 4L, 3L), .Label = c("UICC Stage I", 
"UICC Stage II", "UICC Stage III", "UICC Stage IV"), class = "factor")), row.names = c(NA, 
-239L), class = "data.frame")

解决方案

One possible solution is to specify a "fake" color title in the aes of geom_quantile.

Then, you can remove legend for points and labels by adding show.legend = FALSE into their respective geom and manipulate breaks in scale_color_manual to show only the color attribute for your 50th percentile category. Finally, manipulating various parameters for legend in theme will get you to what you desired.

Altogether, you can have a code like this (PS: scale_fill_manual is useless in your current example):

ggplot(p, aes(x=n.fjernet,y=os.neck)) + 
  geom_point(aes(color=uiccc),shape=20, size=5,alpha=0.7, show.legend = FALSE) + 
  geom_quantile(aes(colour = "50th percentile"), quantiles = 0.5, size=1,linetype=2) + 
  facet_wrap(.~factor(uiccc)) +
  #scale_fill_manual(values=cols) + 
  scale_colour_manual(values=cols, breaks = c("50th percentile"), name = "")  +
  scale_x_continuous(breaks = seq(0,50, by=10), name="Lymph nodal yield") +
  scale_y_continuous(name="Time to death (months)") +
  theme(strip.background = element_blank(),
        strip.text = element_text(color = "transparent"),
        axis.title.x = element_text(color = "grey20", size = 14, face="bold", margin=ggplot2::margin(t=10)),
        axis.title.y = element_text(color = "grey20", size = 14, face="bold", margin=ggplot2::margin(r=10)),
        legend.position="top",
        legend.text=element_text(size=rel(2)),
        legend.key.size = unit(2, "cm"),
        plot.margin = unit(c(1,3,1,1), "lines")) +
  coord_cartesian(clip = "off",ylim = c(0,175)) +
  geom_text(data = . %>% distinct(uiccc), 
            aes(label = factor(uiccc), color = uiccc), y = 190, x = 30, hjust = 0.5, fontface = "bold",cex=5, show.legend = FALSE)

这篇关于如何在此自定义facet_wrap中添加geom_quantile图例?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆