r - 如何在ggplot2 R中绘制异常
问题描述
给定monthly
数据three SITES
,three years
我想创建一个类似于本网站所示的 anlay 图。数据仅适用于月份Nov, Dec, Jan, Feb and Mar
。
每个数据SITE
应显示在单独的面板上,如以下代码所示:
geom_bar(stat = "identity",fill = "darkmagenta")+
facet_wrap(~Station.Name)+scale_y_continuous(limits=c(-1,9),breaks = seq(-1,9, by = 1))+ylab("Surface temperature anomaly (°C)") + xlab("Time (year)")
我想在情节上实施以下内容:
- 每个站点的x 轴标签应为月年格式,例如 2014 年 11 月、2014 年 12 月等。
- 每个月都绘制为条形图
- 将
0
行加粗 - 大于 0 的值被涂成红色,低于 0 的值被涂成蓝色
以下是样本数据:
Data=structure(list(Station.Name = c("SITE A", "SITE A", "SITE A",
"SITE A", "SITE A", "SITE A", "SITE A", "SITE A", "SITE A", "SITE A",
"SITE B", "SITE B", "SITE B", "SITE B", "SITE B", "SITE B", "SITE B",
"SITE B", "SITE B", "SITE B", "SITE C", "SITE C", "SITE C", "SITE C",
"SITE C", "SITE C", "SITE C", "SITE C", "SITE C", "SITE C"),
Month = c("Nov", "Dec", "Jan", "Feb", "Mar", "Nov", "Dec",
"Jan", "Feb", "Mar", "Nov", "Dec", "Jan", "Feb", "Mar", "Nov",
"Dec", "Jan", "Feb", "Mar", "Nov", "Dec", "Jan", "Feb", "Mar",
"Nov", "Dec", "Jan", "Feb", "Mar"), Year = c(2014L, 2014L,
2015L, 2015L, 2015L, 2015L, 2015L, 2016L, 2016L, 2016L, 2014L,
2014L, 2015L, 2015L, 2015L, 2015L, 2015L, 2016L, 2016L, 2016L,
2014L, 2014L, 2015L, 2015L, 2015L, 2015L, 2015L, 2016L, 2016L,
2016L), Tm_Normals_Diff = c(-2.3, 0.9, 1.4, -0.2, 2.3, 3.5,
1.8, 5.3, 3, 4.5, 0.6, 1.6, 1.8, 1.7, 2.9, 3.7, -0.1, 7.4,
3.2, 4.6, 4.2, 2.7, 3.5, 5.4, 5.1, 6.7, 0.7, 8.5, 4, 4.4)), class = "data.frame", row.names = c(NA,
-30L))
解决方案
这个怎么样:
Data <- Data %>%
mutate(date = lubridate::dmy(paste("01", Month, Year, sep="-")),
month = zoo::as.yearmon(date),
month_fac = factor(1:n(), labels=as.character(month)),
col = factor(ifelse(Tm_Normals_Diff > 0, 2, 1)))
ggplot(Data, aes(x=month_fac, y=Tm_Normals_Diff, fill=col)) +
geom_bar(stat = "identity", show.legend=FALSE)+
geom_hline(yintercept=0, size=1) +
facet_wrap(~Station.Name)+
theme(axis.text.x=element_text(angle = 90)) +
scale_y_continuous(limits=c(-1,9),breaks = seq(-1,9, by = 1))+
scale_fill_manual(values=c("blue", "red")) +
ylab("Surface temperature anomaly (°C)") +
xlab("Time (year)")
推荐阅读
- c# - 使用 AntiforgeryToken 从 ASPNET.CORE 获取 400 状态
- python - 构造python循环语句
- php - 在 PHP 应用程序中使用 Keybase API
- python - 谷歌 API 中的 GetOperation
- excel - VBA 多个可选函数参数
- android - java.lang.RuntimeException:无法启动活动 ComponentInfo_Error inflating class android.support.design.widget.NavigationView
- vba - 使用 word VBA 替换内联形状
- c# - DynamoDb.net:添加多个扫描条件
- android - I/CrashlyticsCore:Crashlytics 报告上传完成但未显示在仪表板中
- antlr4 - 如何使用 ANTLR-Visitor 处理可选语法块?