我正在尝试在y轴上制作太阳辐照度(来自天气文件),并在x轴上制作月数。
我的数据包含按小时收集的值,为期12个月,因此总共有8760行填充了数据值。
现在,我想以这样一种方式制作情节:在一天中,我只通过添加一整天的值来获得一个关于积分的观点(不像取所有值并绘制它们。我相信{{1可以绘制这种类型的数据。我已经找到了这个,但没有按照我想要的方式找到足够的例子。(或者,如果有一些方法可以帮助我实现我想要的情节,因为我不确定我到底有什么为一天添加积分。否则编写365天的代码是疯狂的)
我的绘图代码是:
geom_freqpoly()
而我的数据看起来像这样:
library(ggplot2)
cmsaf_data <- read.csv("C://Users//MEJA03514//Desktop//main folder//Irradiation data//tmy_era_25.796_45.547_2005_2014.csv",skip=16, header=T)
time<- strptime(cmsaf_data[,2], format = "%m/%d/%Y %H:%M")
data <- cbind(time,cmsaf_data[5])
#data %>% select(time)
data <- data.frame(data, months = month(time),days = mday(time))
data <- unite(data, date_month, c(months, days), remove=FALSE, sep="-")
data <- subset(data, data[,2]>0)
GHI <- data[,2]
date_month <- data[,3]
ggplot(data, aes(date_month, GHI))+geom_line()
因为我想要一天1点,我怎样才能执行求和功能,这样我就可以得到我需要的输出并在x轴上显示月份名称(可能正在使用时间和日期的东西可以做这个添加一天,在产出中给出365年的价值
我根本不知道任何这样的功能或方法。
我们将非常感谢您的帮助!
答案 0 :(得分:1)
为了获得每年每个月的总和,您需要创建一个描述特定年份(Yearmon)特定月份的列。 然后,您可以对该列进行分组,并对该组进行总结,为每年的每个月提供一笔金额。
然后你只需绘制它并根据自己的喜好设置x轴的标签。
library(ggplot2)
library(dplyr)
library(zoo)
library(scales)
# Create dummy data for time column
time <- seq.POSIXt(from = as.POSIXct("2007-01-01 00:00:00"),
to = as.POSIXct("2017-01-01 23:00:00"),
by = "hour")
# Create dummy data.frame
data <- data.frame(Time = time,
GHI = rnorm(length(time)))
############################
# Add column Yearmon to the data.frame
# Groupy by Yearmon and summarise with sum
# This creates one sum per Yearmon
# ungroup is often not neccessary, however
# not doing this caused problems for me in the past
# Change type of Yearmon to Date for ggplot
#
df <- mutate(data,
Yearmon = as.yearmon(Time)) %>%
group_by(Yearmon) %>%
summarise(GHI_sum = sum(GHI)) %>%
ungroup() %>%
mutate(Yearmon = as.Date(Yearmon))
# Plot the chart with special scale lables
ggplot(df, aes(Yearmon, GHI_sum))+
geom_line()+
scale_x_date(labels = date_format("%m/%y"))
我希望这会有所帮助。
答案 1 :(得分:1)
这是使用tidyverse和lubridate包的解决方案。由于您还没有提供完整的样本数据,我已经生成了一些随机数据。
library(tidyverse)
library(lubridate)
data <- tibble(
time = seq(ymd_hms('2007-01-01 00:00:00'),
ymd_hms('2007-12-31 23:00:00'),
by='hour'),
variable = sample(0:400, 8760, replace = TRUE)
)
head(data)
#> # A tibble: 6 x 2
#> time variable
#> <dttm> <int>
#> 1 2007-01-01 00:00:00 220
#> 2 2007-01-01 01:00:00 348
#> 3 2007-01-01 02:00:00 360
#> 4 2007-01-01 03:00:00 10
#> 5 2007-01-01 04:00:00 18
#> 6 2007-01-01 05:00:00 227
summarised <- data %>%
mutate(date = date(time)) %>%
group_by(date) %>%
summarise(total = sum(variable))
head(summarised)
#> # A tibble: 6 x 2
#> date total
#> <date> <int>
#> 1 2007-01-01 5205
#> 2 2007-01-02 3938
#> 3 2007-01-03 5865
#> 4 2007-01-04 5157
#> 5 2007-01-05 4702
#> 6 2007-01-06 4625
summarised %>%
ggplot(aes(date, total)) +
geom_line()