ggplot2 remove legend 删除注释
Posted
技术标签:
【中文标题】ggplot2 remove legend 删除注释【英文标题】:ggplot2 remove legend removes annotations 【发布时间】:2022-01-09 11:32:21 【问题描述】:我正在创建一个带有第二个 y 轴的图来记录健身类别。我已经使用 hline 和 annotate 获得了类别和标签。我已经为产生图例的箱形图指定了填充。此图例涵盖了注释,但删除图例也会删除所有注释。有没有办法只删除注释。见以下代码:
没有图例:
fmsft <- ggplot(Fboxm, aes(test, count))
fmsft + geom_boxplot(aes(fill = test), show.legend = FALSE) +
labs(x="Test", y=expression("Estimated VO"["2Max"])) +
geom_hline(yintercept = 23.9, size = 1.3) +
annotate("text", label = "Very Poor",
x = 7, y = 23.9) +
coord_cartesian(xlim = c(0,6), clip = "off") +
geom_hline(yintercept = 28.6, size = 1.3) +
annotate("text", label = "Poor",
x = 7, y = 28.6) +
geom_hline(yintercept = 34.6, size = 1.3) +
annotate("text", label = "Fair",
x = 7, y = 34.6) +
geom_hline(yintercept = 40.6, size = 1.3) +
annotate("text", label = "Good",
x = 7, y = 40.6) +
geom_hline(yintercept = 46.5, size = 1.3) +
annotate("text", label = "Excellent",
x = 7, y = 46.5) +
geom_hline(yintercept = 56, size = 1.3) +
annotate("text", label = "Superior",
x = 7, y = 56)
带图例:
fmsft <- ggplot(Fboxm, aes(test, count))
fmsft + geom_boxplot(aes(fill = test)) +
labs(x="Test", y=expression("Estimated VO"["2Max"])) +
geom_hline(yintercept = 23.9, size = 1.3) +
annotate("text", label = "Very Poor",
x = 7, y = 23.9) +
coord_cartesian(xlim = c(0,6), clip = "off") +
geom_hline(yintercept = 28.6, size = 1.3) +
annotate("text", label = "Poor",
x = 7, y = 28.6) +
geom_hline(yintercept = 34.6, size = 1.3) +
annotate("text", label = "Fair",
x = 7, y = 34.6) +
geom_hline(yintercept = 40.6, size = 1.3) +
annotate("text", label = "Good",
x = 7, y = 40.6) +
geom_hline(yintercept = 46.5, size = 1.3) +
annotate("text", label = "Excellent",
x = 7, y = 46.5) +
geom_hline(yintercept = 56, size = 1.3) +
annotate("text", label = "Superior",
x = 7, y = 56)
提前致谢!
【问题讨论】:
我没有你的数据,所以我没有检查以确保这能正常工作。但是,我认为注释掉的原因是因为您使用的空间不再存在。您需要做的是添加scale_x_discrete(expand = expansion(mult = (0, 1)))
1
将在图表的右侧创建空间,以便您的文字可见。您可能需要根据您的数据调整此值,直到适合为止。
@Kat 谢谢你的回答。这确实有效,但扩大了绘图区域,所以文本确实出现了,但现在以网格主题作为背景,并且 geom_hline 在它上面运行
这是个问题!看来@r2evans 有一个很好的答案,那么!
@Kat 是的答案完美。也感谢您的帮助,感谢尝试解决问题的人们
【参考方案1】:
添加theme(plot.margin = unit(..., "cm"))
调整右边距。
使用mtcars
进行演示。
library(ggplot2)
gg <- ggplot(mtcars, aes(disp, mpg)) +
geom_point() +
coord_cartesian(xlim = c(0, 480), clip = "off") +
annotate("text", label = "quuxbar", x = 540, y = 20)
gg
gg + theme(plot.margin = unit(c(0.2, 2, 0.2, 0.2), "cm"))
仅供参考,默认值:
theme_get()$plot.margin
# [1] 5.5points 5.5points 5.5points 5.5points
【讨论】:
以上是关于ggplot2 remove legend 删除注释的主要内容,如果未能解决你的问题,请参考以下文章
R语言可视化包ggplot2移除(remove)可视化结果的图例(legend)实战
R语言ggplot2可视化: 将图例标题(legend title)对齐到ggplot2中图例框的中间(默认左对齐align legend title to middle of legend)
R语言ggplot2可视化自定义ggplot2可视化图像图例(legend)的背景色(change background colour of legend)
R语言可视化包ggplot2改变图例(legend)标签实战
R语言ggplot2可视化:ggplot2可视化分组箱图,将可视化图像的图例(legend)放置在图像底部居中其中图例信息水平平铺 (position legend bottom center)