r - R中ggplot中的图例
问题描述
我对 R 和 ggplot 很陌生,完全是自学的。我正在尝试重新创建出现在英国政府冠状病毒网站上的图表。
我似乎根本无法让 ggplot 创建一个传奇。我希望图例显示 3 件事:(灰色)最近 5 天(不完整)、(steelblue)案例数和(蓝线)案例(7 天平均值)。
我相信我可以使轴看起来不错,格式化日期等,我一直在努力做传奇。
感谢您的关注。
# Libraries
library(tidyverse)
#Data
England_Rates <- read.csv("https://api.coronavirus.data.gov.uk/v2/data?areaType=nation&areaCode=E92000001&metric=newCasesBySpecimenDate&format=csv")
England_Rates$AveragenewCasesBySpecimenDate <- rollapply(England_Rates$newCasesBySpecimenDate, 7, mean, align = "right", fill=NA)
England_Rates$data_colour <- "steelblue"
England_Rates$data_colour[1] <- NA
England_Rates$data_colour[2] <- "grey"
England_Rates$data_colour[3] <- "grey"
England_Rates$data_colour[4] <- "grey"
England_Rates$data_colour[5] <- "grey"
England_Rates$data_colour[6] <- "grey"
ggplot() +
geom_col(aes(x = England_Rates$date, y = England_Rates$newCasesBySpecimenDate),colour=England_Rates$data_colour) +
geom_line(aes(x = England_Rates$date, y = England_Rates$AveragenewCasesBySpecimenDate), size=1.2, colour="blue", group=1)
https://coronavirus.data.gov.uk/details/cases
工作代码
library(tidyverse)
#Data
England_Rates <- read.csv("https://api.coronavirus.data.gov.uk/v2/data?areaType=nation&areaCode=E92000001&metric=newCasesBySpecimenDate&format=csv")
England_Rates$AveragenewCasesBySpecimenDate <- rollapply(England_Rates$newCasesBySpecimenDate, 7, mean, align = "right", fill=NA)
England_Rates$data_colour <- "Number of cases"
England_Rates$data_colour[1] <- NA
England_Rates$data_colour[2] <- "Most recent 5 days (incomplete)"
England_Rates$data_colour[3] <- "Most recent 5 days (incomplete)"
England_Rates$data_colour[4] <- "Most recent 5 days (incomplete)"
England_Rates$data_colour[5] <- "Most recent 5 days (incomplete)"
England_Rates$data_colour[6] <- "Most recent 5 days (incomplete)"
data <- data.frame (Date = as.Date(England_Rates_3$date),
Cases = England_Rates$newCasesBySpecimenDate.x,
"Cases (7-day Average)" = England_Rates$AveragenewCasesBySpecimenDate,
BlueorGrey = England_Rates$data_type)
group.colors <- c("Number of cases" = "#5694ca", "Most recent 5 days (incomplete)"="dark grey","Cases 7 day (Average)"="dark blue" )
ggplot(data,
aes(x=Date, y=Cases, fill=BlueorGrey))+
theme(
text = element_text(color = "black"),
axis.text=element_text(colour="black"),
panel.background = element_rect(fill = "white",
colour = "white",
size = 0.5, linetype = "solid"),
panel.grid.major = element_line(size = 0.5, linetype = 'twodash',
colour = "light grey"),
panel.grid.minor = element_line(size = 0.25, linetype = 'twodash',
colour = "light grey"),
legend.title = element_blank(),
legend.position = "bottom",
legend.box = "vertical",
axis.title=element_blank())+
geom_bar(stat = "identity", width=1) +
scale_fill_manual(values=group.colors) +
geom_line(aes(y=Cases..7.day.Average., fill="Cases 7 day (Average)"), colour="dark blue", size=0.8)
解决方案
您无需事先手动为绘图分配颜色,使用映射美学为您生成比例。您可以在比例级别指定调色板。在下面的示例中,我们只是将文本放在我们想要显示为图例标签的图层中。
# Libraries
library(tidyverse)
library(zoo)
#Data
England_Rates <- read.csv("https://api.coronavirus.data.gov.uk/v2/data?areaType=nation&areaCode=E92000001&metric=newCasesBySpecimenDate&format=csv")
England_Rates$AveragenewCasesBySpecimenDate <- rollapply(
England_Rates$newCasesBySpecimenDate, 7, mean, align = "right", fill=NA
)
# as.Date() makes the axis nicer
# We declare the x-variable globally in the main ggplot call,
# so you don't need to repeat it in the geom-layers.
ggplot(England_Rates, aes(x = as.Date(date))) +
geom_col(aes(y = newCasesBySpecimenDate)) +
geom_line(aes(y = AveragenewCasesBySpecimenDate,
colour = "7 Day Rolling Average"), # Just fill in text or choose a column from data
size=1.2, group=1) +
scale_colour_manual(
values = "blue" # Choose as many colours as you have legend items
)
#> Warning: Removed 6 row(s) containing missing values (geom_path).
由reprex 包于 2021-04-07 创建(v1.0.0)
类似的东西适用于geom_col()
,但我想你想要那个的fill
审美/比例。scale_colour/fill_*()
可以在函数中调整图例标题和其他调整。
推荐阅读
- django - 这是否可以限制核心模型中的反向关系查找?
- amazon-web-services - AWS:使用 Cloudsearch 提取文本
- sql - 返回 SQL Server 上 DATETIME2(2) 的最小值和最大值
- mobaxterm - MobaXterm:如何在不使用已保存会话的情况下打开 ssh 浏览器
- python - 如何在 elasticsearch python 低级客户端中指定 index.mapping.ignore_malformed?
- javascript - React Native Expo - 无法将数据发送到 php 文件
- python-2.7 - 将整数与浮点数相乘会产生不好的结果 Python 2.7
- javascript - 返回带有布尔值的局部视图
- python - 如何从python中的数组字典中获取值?
- oauth - 通过 nodemailer 中的 gmail oauth 发送电子邮件需要哪个范围?