【问题标题】:How do I add text to figure in ggplot2?如何在ggplot2中添加文本?
【发布时间】:2021-08-27 18:54:36
【问题描述】:

我想使用 ggplot2 将文本标签添加到绘图区域,但不能完全做到我想要的。使用下面的数据集,我可以生成一个接近我需要的合理数字。

data <- structure(list(LOCATION = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 
                                              1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                              1L, 1L, 1L, 1L), .Label = "davis", class = "factor"), date = structure(c(17602, 
                                                                                                                       17609, 17613, 17618, 17623, 17626, 17633, 17639, 17646, 17651, 
                                                                                                                       17666, 17673, 17681, 17602, 17609, 17613, 17618, 17623, 17626, 
                                                                                                                       17633, 17639, 17646, 17651, 17666, 17673, 17681), class = "Date"), 
                       Cultivar = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                              1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                              2L, 2L), .Label = c("V2_P2", "1728"), class = "factor"), 
                       Zadoks = c(60, 64, 68, 71, 72, 73, 75, 76, 79, 80, 90, 90, 
                                  90, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 
                       MinZadoks = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
                                     NA, NA, 41, 57, 57, 57, 57, 57, 57, 57, 83, 83, 87, 87, 90
                       ), MaxZadoks = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
                                        NA, NA, NA, 49, 59, 59, 59, 59, 59, 59, 59, 87, 87, 89, 89, 
                                        90), date2 = structure(c(18698, 18705, 18709, 18714, 18719, 
                                                                 18722, 18729, 18735, 18742, 18747, 18762, 18769, 18777, 18698, 
                                                                 18705, 18709, 18714, 18719, 18722, 18729, 18735, 18742, 18747, 
                                                                 18762, 18769, 18777), class = "Date")), row.names = c("12462", 
                                                                                                                       "12548", "12634", "12720", "12806", "12892", "12980", "13066", 
                                                                                                                       "13152", "13242", "13329", "13417", "13503", "124621", "125481", 
                                                                                                                       "126341", "127201", "128061", "128921", "129801", "130661", "131521", 
                                                                                                                       "132421", "133291", "134171", "135031"), class = "data.frame")


以下是我用来生成图形的脚本。

# The basic plot that I want labels on
ggplot(plotting.data, aes(x=date2, y=Zadoks)) +
  geom_point(aes(color = Cultivar), size=1) +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1)) +
  scale_y_continuous(breaks=seq(0,90,10)) +
  scale_x_date(date_breaks = "months" , date_labels = "%b") +
  labs(x = "Date", y = "Zadoks") +
  geom_errorbar(aes(ymin=MinZadoks, ymax=MaxZadoks), size=0.1) +
  theme_classic() +
  scale_color_grey()

理想情况下,我希望在图中包含类似于下图中的标签。任何人都可以提出一种方法来实现这一目标吗?谢谢!

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    我很好奇dataplotting.data 是否不同。 annotate 可能是您需要的。考虑下面的代码。

    ggplot(data, aes(x=date2, y=Zadoks)) +
      geom_point(aes(color = Cultivar), size=1) +
      theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1)) +
      scale_y_continuous(breaks=seq(0,90,10)) +
      scale_x_date(date_breaks = "months" , date_labels = "%b") +
      labs(x = "Date", y = "Zadoks") +
      geom_errorbar(aes(ymin=MinZadoks, ymax=MaxZadoks), size=0.1) +
      theme_classic() +
      scale_color_grey() +
      annotate("text", x=as.Date("2021-06-01"), y=82, label= "Ripening") +
      annotate("text", x=as.Date("2021-05-26"), y=72, label= "Development of fruit") +
      annotate("text", x=as.Date("2021-05-27"), y=62, label= "Flowering, anthesis") +
      annotate("text", x=as.Date("2021-05-21"), y=52, label= "Inflorescence emergence, heading") +
      annotate("text", x=as.Date("2021-06-01"), y=42, label= "Booting")
    

    图是这样的

    【讨论】:

      【解决方案2】:

      你可以更简单。收集数据框中的标签并使用一个命令添加annotate

      txt = tribble(
        ~Date, ~y, ~label,
        "2021-06-01", 82, "Ripening",
        "2021-05-26", 72, "Development of fruit",
        "2021-05-27", 52, "Inflorescence emergence, heading"
      )
      
      ggplot(data, aes(x=date2, y=Zadoks)) +
        geom_point(aes(color = Cultivar), size=1) +
        theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1)) +
        scale_y_continuous(breaks=seq(0,90,10)) +
        scale_x_date(date_breaks = "months" , date_labels = "%b") +
        labs(x = "Date", y = "Zadoks") +
        geom_errorbar(aes(ymin=MinZadoks, ymax=MaxZadoks), size=0.1) +
        theme_classic() +
        scale_color_grey() +
        annotate(geom="text", x=as.Date(txt$Date), y=txt$y, label= txt$label)
      
      

      【讨论】:

        猜你喜欢
        • 2019-06-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多