r - 在R中使用ggplot的意大利面条图?
问题描述
我想制作一个 speghatii plot
,我需要在其中查看一年中的几天以及每个的x-axis
数据。然后,我想要一个单独的年份,只有 3 个月的数据处于相同但不同的线上。这是我生成的图表(附加),其中每个特定的数据是- 我不想要图表。我想要一个图表。谢谢y-axis
Year
(PCPNewData)
plotted
figure
color
bold
sample code
Year
Day
stacked
bar
line
library(tidyverse)
library(tidyr)
myDates=as.data.frame(seq(as.Date("2000-01-01"), to=as.Date("2010-12-31"),by="days"))
colnames(myDates) = "Date"
Dates = myDates %>% separate(Date, sep = "-", into = c("Year", "Month", "Day"))
LatestDate=as.data.frame(seq(as.Date("2011-01-01"), to=as.Date("2011-03-31"),by="days"))
colnames(LatestDate) = "Date"
NewDate = LatestDate %>% separate(Date, sep = "-", into = c("Year", "Month", "Day"))
PCPDataHis = data.frame(total_precip = runif(4018, 0,70), Dates)
PCPNewData = data.frame(total_precip = runif(90, 0,70), NewDate)
PCPDataHisPlot =PCPDataHis %>% group_by(Year) %>% gather(key = "Variable", value = "Value", -Year, -Day,-Month)
ggplot(PCPDataHisPlot, aes(Day, Value, colour = Year))+
geom_line()+
geom_line(data = PCPNewData, aes(Day, total_precip))
更新:figure
我用手
画出我想要的(见附件)。我想把所有days of the Years
关于x-axis
它的数据放在y-axis
解决方案
您的代码中几乎没有错误。
首先,你的日子是有character
格式的。您需要以数字格式传递它们以使线条连续。
然后,你每天都有多个数据(因为你每年有 12 个月),所以你需要稍微总结一下这些数据:
Pel2 <- Pelly2Data %>% group_by(year,day) %>% summarise(Value = mean(Value, na.rm = TRUE))
Pel3 <- Pelly2_2011_3months %>% group_by(year, day) %>% summarise(total_precip = mean(total_precip, na.rm = TRUE))
ggplot(Pel2, aes(as.numeric(day), Value, color = year))+
geom_line()+
geom_line(data = Pelly2_2011_3months, aes(as.numeric(day), y= total_precip),size = 2)
它看起来更好,但很难应用特定的颜色模式
在我看来,如果您可以比较每个数据集的平均值,则不会那么混乱,例如:
library(tidyverse)
Pel2 <- Pelly2Data %>% group_by(day) %>%
summarise(Mean = mean(Value, na.rm = TRUE),
SEM = sd(Value,na.rm = TRUE)/sqrt(n())) %>%
mutate(Name = "Pel_ALL")
Pel3 <- Pelly2_2011_3months %>% group_by(day) %>%
summarise(Mean = mean(total_precip, na.rm = TRUE),
SEM = sd(total_precip, na.rm = TRUE)/sqrt(n())) %>%
mutate(Name = "Pel3")
Pel <- bind_rows(Pel2,Pel3)
ggplot(Pel, aes(x = as.numeric(day), y = Mean, color = Name))+
geom_ribbon(aes(ymin = Mean-SEM, ymax = Mean+SEM), alpha = 0.2)+
geom_line(size = 2)
编辑:基于更新的新图表
要获得您作为绘图发布的图表,您需要有一年中的某一天,而不是一个月中的某一天。我们可以通过设置日期序列来获取此信息,并使用yday
`lubridate 包中的函数提取一年中的哪一天。
library(tidyverse)
library(lubridate)
Pelly2$Date = seq(ymd("1990-01-01"),ymd("2010-12-31"), by = "day")
Pelly2$Year_day <- yday(Pelly2$Date)
Pelly2_2011_3months$Date <- seq(ymd("2011-01-01"), ymd("2011-03-31"), by = "day")
Pelly2_2011_3months$Year_day <- yday(Pelly2_2011_3months$Date)
Pelly2$Dataset = "ALL"
Pelly2_2011_3months$Dataset = "2011_Dataset"
Pel <- bind_rows(Pelly2, Pelly2_2011_3months)
然后,您可以组合这两个数据集并用不同的颜色、大小、透明度 (alpha) 表示它们,如下所示:
ggplot(Pel, aes(x = Year_day, y = total_precip, color = year, size = Dataset, alpha = Dataset))+
geom_line()+
scale_size_manual(values = c(2,0.5))+
scale_alpha_manual(values = c(1,0.5))
它回答了你的问题吗?
推荐阅读
- signalr - 在使用 azure signalR 的 azure function app 中更改 KeepAlive 的值
- java - SQL 服务器身份打开,但 org.hibernate.id.IdentifierGenerationException:必须在查询调用 save() 之前手动分配此类的 id
- python - 为什么打印后对象在python中以十六进制显示?
- django - Postgresql 主从复制滞后,但 pgpool 将流量发送到两个数据库(主 n 从)
- javascript - 凸形状上的JavaScript墙壁碰撞,卡在角落
- node.js - Firebase 查询数组 'in' 限制为 10
- r - 将特定数字分类为二进制
- for-loop - 批处理:使用循环在文件名中搜索关键字
- python - 如何在 python 中使用 sqlite3 登录到 Oracle 数据库
- php - 从 Laravel 的数据库中检索选定复选框的问题