R 使用ggplot2在X轴上使用datetime时,如何在绘图内部进行注释?

R 使用ggplot2在X轴上使用datetime时,如何在绘图内部进行注释?,r,R,我已经成功地使用ggplot2在R中创建了一个线a图,百分比在Y轴上,日期/时间在X轴上,但我不确定当其为高/低峰值时,如何在图内注释特定的日期/时间 我识别的示例(在R-bloggers和RPubs上)没有使用日期/时间进行注释,我也尝试过对其进行注释(使用ggtext和注释函数等),但没有结果请给我举一个例子,说明如何在R中使用ggplot2执行此操作。 下面当前的R代码创建了折线图,但是您能否帮助我扩展代码以在图形内部进行注释 sentimentdata <- read.csv(&q

我已经成功地使用ggplot2在R中创建了一个线a图,百分比在Y轴上,日期/时间在X轴上,但我不确定当其为高/低峰值时,如何在图内注释特定的日期/时间

我识别的示例(在R-bloggers和RPubs上)没有使用日期/时间进行注释,我也尝试过对其进行注释(使用ggtext和注释函数等),但没有结果请给我举一个例子,说明如何在R中使用ggplot2执行此操作。

下面当前的R代码创建了折线图,但是您能否帮助我扩展代码以在图形内部进行注释

sentimentdata <- read.csv("sentimentData-problem.csv", header = TRUE, sep = ",", stringsAsFactors = FALSE)

sentimentTime <- sentimentdata %>%
        filter(between(Hour, 11, 23)) 

sentimentTime$Datetime <- ymd_hm(sentimentTime$Datetime)

library(zoo)

sentimentTime %>%
  filter(Cat %in% c("Negative", "Neutral", "Positive")) %>%
  ggplot(aes(x = Datetime, y = Percent, group = Cat, colour = Cat)) +
  geom_line() +
  scale_x_datetime(breaks = date_breaks("1 hours"), labels = date_format("%H:00")) +
  labs(title="Peak time on day of event", colour = "Sentiment Category") +
  xlab("By Hour") +
  ylab("Percentage of messages") 

数据%
ggplot(aes(x=日期时间,y=百分比,组=类别,颜色=类别))+
geom_线()+
比例x日期时间(间隔=日期间隔(“1小时”),标签=日期格式(“%H:00”))+
实验室(title=“活动当天的高峰时间”,color=“情绪类别”)+
xlab(“按小时”)+
ylab(“邮件百分比”)

通过GitHub提供的数据源:

由于您有多行,并且您希望根据最大值和最小值在每行上有两个标签,因此您可以创建两个小数据帧来传递给
geom_text
调用

首先,我们确保加载了必要的包和数据:

library(lubridate)
library(ggplot2)
library(scales)
library(dplyr)

url <- paste0("https://raw.githubusercontent.com/jcool12/",
              "datasets/master/sentimentData-problem.csv")

sentimentdata          <- read.csv(url, stringsAsFactors = FALSE)
sentimentdata$Datetime <- dmy_hm(sentimentdata$Datetime)
sentimentTime          <- filter(sentimentdata, between(Hour, 11, 23)) 
这样我们就可以轻松地创建情节:

sentimentTime %>%
  filter(Cat %in% c("Negative", "Neutral", "Positive")) %>%
  ggplot(aes(x = Datetime, y = Percent, group = Cat, colour = Cat)) +
    geom_line() +
    geom_text(data = min_table, aes(label = label)) +     # minimum labels
    geom_text(data = max_table, aes(label = label)) +     # maximum labels
    scale_x_datetime(breaks = date_breaks("1 hours"), 
                     labels = date_format("%H:00")) +
    labs(title="Peak time on day of event", colour = "Sentiment Category") +
    xlab("By Hour") +
    ylab("Percentage of messages") 

由于您有多行,并且您希望根据最大值和最小值在每行上添加两个标签,因此您可以创建两个小数据帧来传递给
geom_text
调用

首先,我们确保加载了必要的包和数据:

library(lubridate)
library(ggplot2)
library(scales)
library(dplyr)

url <- paste0("https://raw.githubusercontent.com/jcool12/",
              "datasets/master/sentimentData-problem.csv")

sentimentdata          <- read.csv(url, stringsAsFactors = FALSE)
sentimentdata$Datetime <- dmy_hm(sentimentdata$Datetime)
sentimentTime          <- filter(sentimentdata, between(Hour, 11, 23)) 
这样我们就可以轻松地创建情节:

sentimentTime %>%
  filter(Cat %in% c("Negative", "Neutral", "Positive")) %>%
  ggplot(aes(x = Datetime, y = Percent, group = Cat, colour = Cat)) +
    geom_line() +
    geom_text(data = min_table, aes(label = label)) +     # minimum labels
    geom_text(data = max_table, aes(label = label)) +     # maximum labels
    scale_x_datetime(breaks = date_breaks("1 hours"), 
                     labels = date_format("%H:00")) +
    labs(title="Peak time on day of event", colour = "Sentiment Category") +
    xlab("By Hour") +
    ylab("Percentage of messages") 

请给出一个。@MartinGal如上所示完成。请给出一个。@MartinGal如上所示完成。感谢您制作此示例,非常感谢。我已经按照你的要求做了,并提供了可复制示例的信息。@jr134我已经完全重写了我的答案,使其直接适用于你的问题非常感谢你花时间做这件事,真是帮了大忙。我想知道我是否希望根据最大值和最小值为每行添加两个以上的标签,@jr134最简单的方法是创建一个包含所需位置和标签的数据框,然后使用此数据框调用额外的
geom_text
。感谢您制作此示例,非常感谢。我已经按照你的要求做了,并提供了可复制示例的信息。@jr134我已经完全重写了我的答案,使其直接适用于你的问题非常感谢你花时间做这件事,真是帮了大忙。我想知道我是否希望根据最大值和最小值为每行添加两个以上的标签,@jr134最简单的方法是创建一个包含所需位置和标签的数据框,然后使用该数据框调用额外的
geom_text