【问题标题】:Temperature curve in RR中的温度曲线
【发布时间】:2017-08-21 23:44:37
【问题描述】:

我想在一张图中创建两条温度曲线。 我的数据框如下所示:

temp <- read.table(text = "     Time        Temp1       Temp2
                           1  00:00     18.62800    18.54458
                           2   00:10     18.60025    18.48283
                           3   00:20     18.57250    18.36767
                           4   00:30     18.54667    18.36950
                           5   00:40     18.51483    18.36550
                           6   00:50     18.48325    18.34783
                           7   01:00     18.45733    18.22625
                           8   01:10     18.43767    18.19067
                           9   01:20     18.41583    18.22042
                           10  01:30     18.39608    18.21225
                           11  01:40     18.37625    18.18658
                           12  01:50     18.35633    18.05942
                           13  02:00     18.33258    18.04142", header = T)

如何通过仅在 x 轴上显示每小时(24 小时)来获得清晰的曲线(线条上没有边缘,如折线图)? 我正在考虑用 ggplot2 做一些事情,但我仍在学习 R 基础知识。

【问题讨论】:

  • 你能输入(head(df)),df是你的数据框吗?
  • “干净的曲线”到底是什么意思?您想在绘图前汇总您的数据吗?
  • 要求“干净的曲线”,但问题不清楚....
  • 抱歉造成混乱,感谢您的编辑。我想得到一个温度图表,它只显示一天中的每个小时,而不是像我的数据框中那样每 10 分钟显示一次。
  • 那么,您是要去掉非全时的值,还是要 x 轴标签只显示全时?

标签: r dataframe plot ggplot2 temperature


【解决方案1】:

如果您想绘制所有值但只有完整小时作为 x 轴标签,您可以使用 ggplot 包绘制数据并使用 scale_x_discrete() 选项指定 breaks

library(ggplot2)

is_full_time <- grepl(':00', temp$Time)
ggplot(temp, aes(x = Time, y = Temp1, group = 1)) + geom_line() + scale_x_discrete(breaks = temp$Time[is_full_time])

http://ggplot2.tidyverse.org/reference/scale_discrete.html

【讨论】:

  • 由于您将所有数据都放在那里,这不会让 ggplot 对象不必要地增长吗?
  • 嘿@loki,是否有必要取决于您是否认为整小时之间的数据对于绘图是必要的,并为绘图的查看者添加更多信息。如果您实际存储对象,则此特定示例中的差异小于 1000 字节。
【解决方案2】:

我们可以为此使用tidyverse。首先,我们通过仅使用00 分钟获取时间值来“清理”所有不必要行中的数据,然后我们使用ggplot 来可视化温度。

library(tidyverse)

cleanTemp <- temp %>% filter(grepl(pattern = ":00", Time))

ggplot(cleanTemp, aes(x = Time, y = Temp1, group = 1)) + 
  geom_line()

Temp2 可以使用

添加到绘图中
geom_line(aes(y = Temp2), color = "red")

您也可以使用lubridate 对时间列进行子集化:

temp$Time <- hm(temp$Time)
cleanTemp <- temp[minute(temp$Time) == 0,]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    • 2012-04-20
    相关资源
    最近更新 更多