我有一个数据集,其中包含1989年以来一个地区的平均日气温.我的数据集摘录如下:

         DATE   MAX   ATT TEMP
1  1989-01-04  33.8       26.2
2  1989-01-06  41.0       29.6
3  1989-01-09  43.5     * 38.5
4  1989-02-05  39.6     * 35.6
5  1989-02-25  41.0     * 36.1
6  1989-02-26  49.1       40.6
7  1989-03-04  60.4     * 57.9
8  1989-03-07  63.3       49.8
9  1989-03-09  64.4     * 54.0
10 1989-03-13  55.4     * 46.5

这一数据集跨越从1989年到2023年的多个年份.I want to plot a line graph where every year is a line, with data from the TEMP variable.

我可以很容易地做到这一点,每个月的数据值,通过遵循类似this的解决方案.然而,这只创建了每月粒度的行,而我希望我的数据集中的每一天都有要表示的值.

我最初try 了以下代码:

library(ggplot2)

weather = read.csv("<FILE>")

weather$MonthN <- as.numeric(format(as.Date(weather$DATE_FORMAT),"%m")) # Month's number
weather$Month  <- months(as.Date(weather$DATE_FORMAT), abbreviate=TRUE) # Month's abbr.
weather$Year <- (format(as.Date(weather$DATE_FORMAT),"%Y")) # Year's number

ggplot(data = weather, aes(x = DATE, 
                            y = TEMP, group=Year, shape = Year, colour=Year)) +
  geom_line() +
  labs(x="Month", colour="Year") +
  theme_classic()

遗憾的是,这只是创建了一个包含整个数据集的线形图,其中每一年都使用不同的 colored颜色 (我希望这样做,但每一年都是一条线):

Image

我最初的 idea 是为一年中的每一天设定一个类似于月份的值,但闰年和其他事情,以及记录的数据条目不是均匀间隔的事实,意味着它不起作用.

以下是我的数据集:

https://pastebin.com/4hWTdsUB

推荐答案

当您想要按年显示一年中的各个日期时,可以通过将所有日期转换为"一年"来实现,保留(当然)真实的年份和月份以供参考.

因此,我们将执行以下步骤:

  • 转换为Date级,并提取Year级;
  • 也要创建一个FakeDATE,它将包含一年中所有正确的日子,但每一天都将是"一年".通常情况下, Select 一个闰年更安全,这样我们就不会意外地在那里有Feb-29
  • go 掉shape=,它在这里什么也做不了;如果你想要,使用shape=的年限太长了,但是……祝你在那里好运
  • 加上scale_x_date,这样我们就可以保持x轴不显示我们的FakeDate
  • (我们实际上不需要Month=字段,这里没有计算)
library(ggplot2)
weather |>
  transform(
    Year = gsub(".*([0-9]{4})$", "\\1", DATE),
    DATE = as.Date(DATE, format = "%d/%m/%Y"),
    FakeDATE = as.Date(sub("[0-9]{4}$", "2024", DATE), format = "%d/%m/%Y")
  ) |>
  ggplot(aes(x = FakeDATE, y = TEMP, group = Year, colour = Year)) +
  geom_line() +
  labs(x="Month", colour="Year") +
  theme_classic() +
  scale_x_date(date_labels = "%b")

enter image description here


数据是从您的链接下载的,然后在上面的代码块之前没有任何更改地读入此处.

weather <- read.csv("~/Downloads/4hWTdsUB.txt")

R相关问答推荐

有没有方法将paste 0功能与列表结合起来?

更改网格的crs以匹配简单要素点对象的crs

R中的枢轴/转置

如何使用shinyChatR包配置聊天机器人

R:连接值,而不是变量?

次级y轴R gggplot2

如何编辑ggplot的图例字使用自定义对象(gtable)?'

为什么在ggplot2中添加geom_text这么慢?

错误:非常长的R行中出现意外符号

R中插入符号训练函数的中心因子和尺度因子预测

如何从像glm这样的模型中提取系数表的相关性?

如何在R库GoogleDrive中完全删除预先授权的Google帐户?

如何在使用箭头R包(箭头::OPEN_DATASSET)和dplyr谓词时编写具有整齐计算的函数?

使用shiny 中的所选要素行下拉菜单

如何使用FormC使简单算术运算得到的数字是正确的?

删除数据帧中特定行号之间的每第三行和第四行

从单个html段落中提取键-值对

在具有条件的循环中添加行

如何使用ggsurvfit包更改风险表中的标签名称?

当y为负值时,无法使stat_cor正确定位到底部?