[英]Multiple Fixed Lines for Text per Legend Label in ggplot2
(這個問題在ggplot2 中的每個圖例 Label 的多行文本上展開。)
我需要在圖例標簽中包含多行信息。 這些標簽需要在固定點處分成幾行,這就是為什么上一個示例中的解決方案對我不起作用的原因。 我試過使用\n
,但在我使用的表達式中,我最終得到了一個偏移量。
set.seed(10)
dat_sof<-tibble(x=seq(1:10))%>%
mutate(y=x+rnorm(10))
leg_col<-c("S1"="blue", "S2"='black')
leg_lty<-c("S1"=1, "S2"=2)
leg_lab<-c(expression("S1:\n y = m1 x + b1\n"~ R^{2} ~ " = r1, n = n1"),
expression("S2:\n y = m2 x + b2\n"~ R^{2} ~ " = r2, n = n2"))
ggplot(data=dat_sof, aes(x=x, y=y))+
geom_point()+
geom_smooth(method='lm', aes(color="S1", lty="S1"), se=F)+
geom_abline(aes(color="S2", lty="S2", slope=1, intercept=0.1))+
theme_bw(base_size=14)+
scale_color_manual(values=leg_col, name="Regressions", labels=leg_lab)+
scale_linetype_manual(values=leg_lty, name="Regressions", labels=leg_lab)+
theme(legend.text.align = 0)
我最終得到的是第三行從 alignment 的 rest 偏移,並且圖例沒有適當間隔。
謝謝您的幫助!
您可以在theme
中使用ggtext
和element_markdown()
,這為您提供了很大的靈活性:
library(ggplot2)
library(dplyr)
set.seed(10)
dat_sof<-tibble(x=seq(1:10))%>%
mutate(y=x+rnorm(10))
leg_col<-c("S1"="blue", "S2"='black')
leg_lty<-c("S1"=1, "S2"=2)
leg_lab <- c("S1:<br>y = m1x + b1<br>R<sup>2</sup> = r1, n = n1",
"S1:<br>y = m2x + b2<br>R<sup>2</sup> = r2, n = n2")
ggplot(data=dat_sof, aes(x=x, y=y))+
geom_point()+
geom_smooth(method='lm', aes(color="S1", lty="S1"), se=F)+
geom_abline(aes(color="S2", lty="S2", slope=1, intercept=0.1))+
theme_bw(base_size=14)+
scale_color_manual(values=leg_col, name="Regressions", labels=leg_lab)+
scale_linetype_manual(values=leg_lty, name="Regressions", labels=leg_lab)+
theme(legend.text.align = 0,
legend.text = ggtext::element_markdown(),
legend.key.height=unit(2, "cm"))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.