我有下面的MWE与iris
数据,我只是想做一个散点图与文本框标签顶部的绘图区。
这是我的输入数据:
data(iris)
set.seed(123)
iris$Group <- sample(LETTERS[1:2], nrow(iris), replace = T)
iris$Highlight <- FALSE
iris$Highlight[iris$Species=="setosa"] <- TRUE
iris$Highlight <- factor(iris$Highlight, levels=c(TRUE, FALSE))
iris$Group[iris$Highlight==FALSE] <- NA
iris$Group <- factor(iris$Group, levels=LETTERS[1:2])
plot_palette <- c("#E41A1C","#377EB8")
字符串
我首先尝试制作我想要的情节,没有任何文本框标签:
P <- ggplot2::ggplot(iris, ggplot2::aes(x=Sepal.Length, y=Sepal.Width, color=Group)) +
ggplot2::geom_point(size=5, alpha=0.5, shape=16) +
ggplot2::scale_color_manual(values=plot_palette, drop=FALSE,
guide=ggplot2::guide_legend(ncol=2, override.aes=list(shape=19, size=8)),
na.value="grey75", breaks=LETTERS[1:2]) +
ggplot2::theme_light() +
ggplot2::theme(axis.text=ggplot2::element_text(size=15),
axis.title=ggplot2::element_text(size=15,face="bold"),
legend.text=ggplot2::element_text(size=18),
legend.title=ggplot2::element_text(size=15,face="bold"),
legend.position="bottom",
legend.key.size=grid::unit(0.5,"inch"),
plot.margin = grid::unit(c(2,2,0,2), "lines"))
grDevices::png(filename="test1.png", height=600, width=600)
print(P)
grDevices::dev.off()
型
这就产生了我想要的情节:
的数据
然而,现在我只想在绘图区域添加一个文本框,这是当事情变得混乱。我尝试了geom_text
和geom_label
在多个地方指定:
P <- P + ggplot2::geom_label(x=4.5, y=4, label="this is\nmy label")
型
……这仍然是我得到的最好的:
为什么图例中显示了标签?我做错了什么?
如果你能在答案中包括如何修改文本(颜色,大小,使其合理),和框(背景颜色,线条粗细.),最重要的是,框锚点,那就太棒了。
PS:它实际上不必是一个框,只是文本会做.解决方案与geom_label
和geom_text
将不胜感激。
谢谢你,谢谢
1条答案
按热度按时间mbyulnm01#
试试
ggplot2::annotate("label",x=4.5, y=4, label="this is\nmy label")
geom_label
,像大多数geom_*
函数(但不是,例如geom_vline)一样,会创建一个层来反映数据中的每个观察结果。也就是说,标签将被创建150次,每次观察一次,并尊重组到颜色的全局美学Map。这里的标签被添加到图例中,这是另一个不希望的副作用。annotate("label", ....)
与数据和任何全局美学无关。参见https://ggplot2.tidyverse.org/reference/annotate.html的数据