首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R ggplot2在geom_hline的ggtext周围绘制一个标签框。

R ggplot2在geom_hline的ggtext周围绘制一个标签框。
EN

Stack Overflow用户
提问于 2022-07-18 20:34:23
回答 2查看 202关注 0票数 0

根据下面的数据和代码,我如何添加一个标签边界框(类似于您将鼠标悬停在一条线上,并且该值通过ggplotly显示在边界框中),如下面所需的输出所示。

请注意,由于一些未知的原因,平均水平线显示为black,尽管在图例中它是blue (如代码中所定义的)。

期望产出:

样本数据(AvgTMeanYear):

代码语言:javascript
复制
structure(list(year = 1980:2021, AvgTMean = c(24.2700686838937, 
23.8852956598276, 25.094446596092, 24.1561175050287, 24.157183605977, 
24.3047482638362, 24.7899738481466, 24.5756232655603, 24.5833086228592, 
24.7344695534483, 25.3094451071121, 25.2100615173707, 24.3651692293534, 
24.5423890611494, 25.2492166633908, 24.7005097837931, 24.2491591827443, 
25.0912281781322, 25.0779264303305, 24.403294248319, 24.4983991453592, 
24.4292324356466, 24.8179824927011, 24.7243948463075, 24.5086534543966, 
24.2818632071983, 24.4567195220259, 24.8402224356034, 24.6574465515086, 
24.5440715673563, 23.482670620977, 24.9979594684914, 24.5452453980747, 
24.9271462811494, 24.7443215819253, 25.8929839790805, 25.1801908261063, 
25.2079308058908, 25.0722425561207, 25.4554644289799, 25.4548979078736, 
25.0756772250287)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-42L))

代码:

代码语言:javascript
复制
    AvgTMeanYear %>%
     group_by(year) %>%
  summarise(tmean = mean(AvgTMean,na.rm = TRUE)) %>%
  ggplot(aes(x= year, y=tmean)) +
  geom_line(aes(color = "Historic Trend"), stat = "identity") +
  geom_hline(yintercept = mean(AvgTMeanYear$tmean), aes(color="Average Temperature")) +
  scale_colour_manual(values = c("Average Temperature" = "blue","Historic Trend" = "black"), name = "Legend") +
  xlab("Year") +
  ylab("Avg. Mean T. (\u00B0C)") +
  ggtitle("Temperature Trend 1980-2021") +
  geom_text(aes(x = 1980 , y = 24.6, label = "24.47 \u00B0C"))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-07-18 20:45:33

让我们来处理所有的问题。

  1. geom_label在文本周围画一个框。
  2. 我们可以通过为geom_hline强制使用不同的数据来解决蓝线问题。Tbh,我不完全确定为什么您最初的文字方法不起作用,但这个方法有效。
  3. 由于标签的位置,我们可以关闭裁剪,以确保它都是可见的。(这可能并不总是一个问题。)(这也可以通过使用hjust=yjust=进行手动控制,或者使用用于动态/随机“强迫”数据的ggrepel包来解决。)
代码语言:javascript
复制
AvgTMeanYear %>%
  group_by(year) %>%
  summarise(AvgTMean = mean(AvgTMean ,na.rm = TRUE)) %>%
  ggplot(aes(x= year, y=AvgTMean)) +
  geom_line(aes(color = "Historic Trend"), stat = "identity") +
  # UPDATED to add new data and put yint inside aes
  geom_hline(aes(yintercept = y, color = "Average Temperature"),
             data = data.frame(col="Average Temperature", y=24.4)) +
  scale_colour_manual(values = c("Average Temperature" = "blue","Historic Trend" = "black"), name = "Legend") +
  xlab("Year") +
  ylab("Avg. Mean T. (\u00B0C)") +
  ggtitle("Temperature Trend 1980-2021") +
  # UPDATED to change geom_text to geom_label
  geom_label(aes(x = 1980 , y = 24.6, label = "24.47 \u00B0C")) +
  # ADDED
  coord_cartesian(clip = "off")

票数 3
EN

Stack Overflow用户

发布于 2022-07-18 20:40:24

你在找geom_label()吗?例如,

代码语言:javascript
复制
ggplot(mtcars, aes(wt, mpg)) +
  geom_point() +
  geom_label(aes(x = 2.62, y = 21, label = "Mazda RX4"))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73028309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档