Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何向具有多个y轴的图形添加单个注释_R_Ggplot2_Reshape - Fatal编程技术网

R 如何向具有多个y轴的图形添加单个注释

R 如何向具有多个y轴的图形添加单个注释,r,ggplot2,reshape,R,Ggplot2,Reshape,我希望添加垂直线和标签,以提请注意ggplot2图形x轴上的特定日期。线条和标签将注意力吸引到同一日期的多个变量上,这些变量相互叠加。我的问题是,我只希望显示每个标签一次,但我的尝试是将标签放置在“每个”y轴图形上 我已经模拟了一些虚拟数据来说明。为免生疑问,我希望实现的是在第一条垂直线上有一个带有文本“a”的标签,在第二行和第三行上有类似的“B”和“C”,目前每行有三个标签 library(ggplot2) library(reshape2) library(dplyr) library(sc

我希望添加垂直线和标签,以提请注意ggplot2图形x轴上的特定日期。线条和标签将注意力吸引到同一日期的多个变量上,这些变量相互叠加。我的问题是,我只希望显示每个标签一次,但我的尝试是将标签放置在“每个”y轴图形上

我已经模拟了一些虚拟数据来说明。为免生疑问,我希望实现的是在第一条垂直线上有一个带有文本“a”的标签,在第二行和第三行上有类似的“B”和“C”,目前每行有三个标签

library(ggplot2)
library(reshape2)
library(dplyr)
library(scales)

set.seed(1234)
PetSightings = data.frame(DateRange = seq(as.Date("2016/1/1"), by = "day", length.out = 60),
                      cats = round(rnorm(60, 10, 3), 0), dogs = round(rnorm(60, 20, 10), 0),
                      parrots = round(rnorm(30, 5, 2)))

PetSightingsMelt = melt(PetSightings, id.vars = "DateRange")


ggplot(PetSightingsMelt, aes(x = DateRange, y = value)) +  
  ggtitle("Pet Sightings") +
  labs(x = "Date", y = "Values") +
  geom_bar(stat = "identity", aes(colour = variable)) +
  geom_vline(xintercept = as.numeric(PetSightings$DateRange[15]), linetype = "longdash", alpha = 0.5) +
  geom_vline(xintercept = as.numeric(PetSightings$DateRange[45]), linetype = "longdash", alpha = 0.5) +
  geom_vline(xintercept = as.numeric(PetSightings$DateRange[55]), linetype = "longdash", alpha = 0.5) +
  annotate("text", x = PetSightings$DateRange[15], y = 25, label = "A", size = 6) +
  annotate("text", x = PetSightings$DateRange[45], y = 25, label = "B", size = 6) +
  annotate("text", x = PetSightings$DateRange[55], y = 25, label = "C", size = 6) +
  facet_grid(variable ~ ., scales = "free_y") +
  theme(legend.position = "none",
    axis.text.x = element_text(angle = 60, vjust = 0.5, size = 6),
    plot.title = element_text(size = 20),
    axis.text.x = element_text(size = 10),
    axis.title.x = element_text(face = "bold", size = 12),
    axis.title.y = element_text(face = "bold", size = 12),
    axis.text.y = element_text(size = 8),
    strip.text.y = element_text(size = 10, angle = 0)) + 
  scale_x_date(labels = date_format("%Y-%m"), date_breaks = "1 month") +
  scale_y_continuous(labels = comma)

似乎我们不能用
注释
来做这件事。因此,我们可以创建一个数据框,用于将特定的
geom_文本
放到绘图上。假设我们创建数据框
ann\u标签
,如下所示:

ann_label <- data.frame(DateRange = PetSightings$DateRange[c(15, 45, 55)], value = 25, label = LETTERS[1:3],
                        variable = factor("cats", level = c("cats", "dogs", "parrots")))
结果:


谢谢@zyurnaidi。成功了!刚刚用我的真实数据测试过。
+ geom_text(data = ann_label, aes(label = label), size = 6)