【问题标题】:How to add a plot name on the top left corner of the plot in R?如何在R中绘图的左上角添加绘图名称?
【发布时间】:2019-06-12 08:13:36
【问题描述】:

我有两个数据框 df1df2 如下:

> df1
             dateTime value
1 2018-06-27 00:00:01     6
2 2018-06-27 00:00:02     2
3 2018-06-27 00:00:03     3
4 2018-06-27 00:00:04     1
> df2
             dateTime value
1 2018-06-27 00:00:01     3
2 2018-06-27 00:00:02     8
3 2018-06-27 00:00:03     4
4 2018-06-27 00:00:04     5

我想在一张图中绘制这些数据框,将它们分成两个具有相同x 轴的不同图,并将它们的名称添加到图的左上角。请注意,dateTime 是一个 POSIXct 对象。代码如下:

library(grid)
library(dplyr)

plot1 <- df1 %>%
  select(dateTime, value) %>%
  ggplot() +
  geom_point(data = df1, aes(dateTime, value)) +
  geom_line(data = df1, aes(x = dateTime, y = value), color = 'green') +
  geom_text(aes(x = df1$dateTime[1], y = df1$value[1], label = "X Data"), color = "red", size = 7) +
  theme(axis.text=element_text(size = 14), axis.title=element_text(size = 14),
        axis.title.x=element_blank(),
        axis.text.x=element_blank(),
        axis.ticks.x=element_blank())

plot2 <- df2 %>%
  select(dateTime, value) %>%
  ggplot() +
  geom_point(data = df2, aes(dateTime, value)) + 
  geom_line(data = df2, aes(x = dateTime, y = value), color = 'red') +
  xlab("dateTime") +
  geom_text(aes(x = df2$dateTime[1], y = df2$value[1]+5, label = "Y Data"), color = "green", size = 7) +
  theme(axis.text=element_text(size = 14), axis.title=element_text(size = 14))

grid.newpage()
grid.draw(rbind(ggplotGrob(plot1), ggplotGrob(plot2), size = "last"))

结果是:

如您所见,X DataY Data 在左上角,但我真的不喜欢手动更改geom_text 中的坐标来获得我想要的确切位置。有没有更好的方法可以在不手动更改坐标的情况下做到这一点?

【问题讨论】:

标签: r ggplot2 geom-text


【解决方案1】:

我使用?annotate 来完成此操作。这是一个简单的例子:

library(ggplot2)
library(scales)
library(grid)

y <- c(6,2,3,1)
x <-  as.POSIXct(c('00:00:01', '00:00:02', '00:00:03', '00:00:04'), format = '%H:%M:%S')
df1 <- data.frame(x, y)

y2 <- c(3,8,4,2)
x2 <-  as.POSIXct(c('00:00:01', '00:00:02', '00:00:03', '00:00:04'), format = '%H:%M:%S')
df2 <- data.frame(cbind(x2, y2))

plot1 <- ggplot() + geom_point(data = df1, aes(x, y)) + 
scale_x_time(labels=time_format('%H:%M:%S', tz=Sys.timezone())) + 
annotate('text', label='first graph', x=-Inf, y=Inf, hjust=0, vjust=1)

plot2 <- ggplot() + geom_point(data = df2, aes(x2, y2)) + 
scale_x_time(labels=time_format('%H:%M:%S',  tz=Sys.timezone())) + 
annotate('text', label='second graph', x=-Inf, y=Inf, hjust=0, vjust=1)

grid.newpage()
grid.draw(rbind(ggplotGrob(plot1), ggplotGrob(plot2), size = "last"))

【讨论】:

  • 它不起作用,因为正如我所说,x 轴 (dateTime) 是一个 POSIXct 对象。
  • 抱歉,我已经编辑了我的回复以包含 scale_x_time()。
  • 这很好,但由于某些原因,我更喜欢使用scale_x_datetime 而不是scale_x_time。在这种情况下,我不能使用annotate
猜你喜欢
  • 2014-11-12
  • 2015-02-12
  • 2021-12-11
  • 2023-03-21
  • 2021-01-02
  • 1970-01-01
  • 1970-01-01
  • 2020-03-18
  • 1970-01-01
相关资源
最近更新 更多