在 facet_wrap() 中更改标签时使用上标
Using superscript when changing labels in facet_wrap()
我正在使用 facet_wrap() 在一页上绘制 7 种空气质量污染物。我想将数据框中使用的缩写(例如“PM”)中的各个绘图标签重命名为长格式(例如“Fine Particulate Matter (ug/m3)”),并希望在其中包含一个上标标签 (ug/m^3)。更改标签时找不到合并上标的方法。
我的没有上标的代码工作正常:
> SeasonalMean
Pollutant Season mean cv
1: SO2 Winter 4.3594786 1.2606103
2: NO Winter 4.8086810 1.3138420
3: NO2 Winter 13.4610992 0.4983027
4: NOX Winter 18.2377363 0.6503697
5: CO Winter 0.2578629 0.3373904
6: O3 Winter 25.0978910 0.4094255
7: PM Winter 9.4271302 0.5599974
8: NOX Spring 14.1144831 0.6320194
9: CO Spring 0.2198282 0.2964914
10: O3 Spring 26.2944466 0.3021818
11: PM Spring 7.7559475 0.5107155
12: SO2 Spring 2.7709979 1.5018185
13: NO Spring 3.3221394 1.4227275
14: NO2 Spring 10.7621779 0.4771676
15: CO Summer 0.2332291 0.3337901
16: O3 Summer 25.8531689 0.3426781
17: PM Summer 8.5609107 0.5751629
18: SO2 Summer 3.2485138 1.3612882
19: NO Summer 4.3011274 1.6905351
20: NO2 Summer 11.4917325 0.4739557
21: NOX Summer 15.8515746 0.7333461
22: O3 Fall 25.3569794 0.3529466
23: PM Fall 8.0808294 0.5460776
24: SO2 Fall 3.7543985 1.3780758
25: NO Fall 3.1074317 1.1202237
26: NO2 Fall 11.8911633 0.4549728
27: NOX Fall 15.0387167 0.5627663
28: CO Fall 0.2378491 0.2780384
new_labels <- c("CO" = "Carbon Monoxide (ppb)", "NO" = "Nitric Oxide (ppb)", "NO2" = "Nitrogen Dioxide (ppb)", "NOX" = "Nitrogen Oxides (ppb)", "O3" = "Ground-Level Ozone (ppb)", "SO2" = "Sulphur Dioxide (ppb)", "PM" = "Fine Particulate Matter (ug/m^3)")
p1 <- ggplot(SeasonalMean, aes(x = Season, y = mean)) +
facet_wrap(~ Pollutant, scales = "free", labeller = labeller(Pollutant = new_labels)) +
geom_point() +
labs(title = "Average Seasonal Air Pollutant Concentrations in Hamilton Downtown (2017)", x = "Season", y = "Mean") +
theme(axis.text.x = element_text(angle = 90, vjust=0.5), plot.title = element_text(hjust = 0.5))
我查看了其他一些问题,但找不到在使用上标的同时组合更改方面标签的任何问题:How do I include a superscript to texts on a plot on R?, Superscript in R, Subscripts in plots in R, How to change facet labels?
我的尝试包括在制作标签名称列表时使用 expression() 和 bquote():
new_labels <- c("CO" = "Carbon Monoxide (ppb)", "NO" = "Nitric Oxide (ppb)", "NO2" = "Nitrogen Dioxide (ppb)", "NOX" = "Nitrogen Oxides (ppb)", "O3" = "Ground-Level Ozone (ppb)", "SO2" = "Sulphur Dioxide (ppb)", "PM" = expression("Fine Particulate Matter (ug/m^3)"))
但这只是使整个列表成为一个表达式:
> new_labels
expression(CO = "Carbon Monoxide (ppb)", NO = "Nitric Oxide (ppb)",
NO2 = "Nitrogen Dioxide (ppb)", NOX = "Nitrogen Oxides (ppb)",
O3 = "Ground-Level Ozone (ppb)", SO2 = "Sulphur Dioxide (ppb)",
PM = "Fine Particulate Matter (ug/m^3)")
我还尝试在 facet_wrap() 的 labeller() 参数中使用 expression() 和 bquote(),但这会导致绘图标签的 none 发生变化:
p1 <- ggplot(SeasonalMean, aes(x = Season, y = mean)) +
facet_wrap(~ Pollutant, scales = "free", labeller = labeller(Pollutant = expression(new_labels))) +
geom_point() +
labs(title = "Average Seasonal Air Pollutant Concentrations in Hamilton Downtown (2017)", x = "Season", y = "Mean") +
theme(axis.text.x = element_text(angle = 90, vjust=0.5), plot.title = element_text(hjust = 0.5))
抱歉,我无法包含任何地块图片,在此先感谢!
用 ggtext
试试这个 tidyverse
解决方案。这意味着数据框中的标签与向量中的标签相似。然后加入它们并使用新添加的变量,其中包含 facet 选项内的标签。之后,您可以将条带文本格式化为 class element_markdown()
。这里的代码:
library(tidyverse)
library(ggtext)
#Labels
Datalabels <- data.frame(Pollutant=c("CO","NO","NO2","NOX","O3","SO2","PM"),
Lab=c("Carbon Monoxide (ppb)","Nitric Oxide (ppb)","Nitrogen Dioxide (ppb)",
"Nitrogen Oxides (ppb)","Ground-Level Ozone (ppb)","Sulphur Dioxide (ppb)",
"Fine Particulate Matter (ug/m^3)"),stringsAsFactors = F)
#Plot
SeasonalMean %>% left_join(Datalabels) %>%
ggplot(aes(x = Season, y = mean)) +
facet_wrap(~ Lab, scales = "free") +
geom_point() +
labs(title = "Average Seasonal Air Pollutant Concentrations in Hamilton Downtown (2017)",
x = "Season", y = "Mean") +
theme(axis.text.x = element_text(angle = 90, vjust=0.5),
plot.title = element_text(hjust = 0.5),
strip.text = element_markdown())
输出:
使用了一些数据:
#Data
SeasonalMean <- structure(list(Pollutant = c("SO2", "NO", "NO2", "NOX", "CO",
"O3", "PM", "NOX", "CO", "O3", "PM", "SO2", "NO", "NO2", "CO",
"O3", "PM", "SO2", "NO", "NO2", "NOX", "O3", "PM", "SO2", "NO",
"NO2", "NOX", "CO"), Season = c("Winter", "Winter", "Winter",
"Winter", "Winter", "Winter", "Winter", "Spring", "Spring", "Spring",
"Spring", "Spring", "Spring", "Spring", "Summer", "Summer", "Summer",
"Summer", "Summer", "Summer", "Summer", "Fall", "Fall", "Fall",
"Fall", "Fall", "Fall", "Fall"), mean = c(4.3594786, 4.808681,
13.4610992, 18.2377363, 0.2578629, 25.097891, 9.4271302, 14.1144831,
0.2198282, 26.2944466, 7.7559475, 2.7709979, 3.3221394, 10.7621779,
0.2332291, 25.8531689, 8.5609107, 3.2485138, 4.3011274, 11.4917325,
15.8515746, 25.3569794, 8.0808294, 3.7543985, 3.1074317, 11.8911633,
15.0387167, 0.2378491), cv = c(1.2606103, 1.313842, 0.4983027,
0.6503697, 0.3373904, 0.4094255, 0.5599974, 0.6320194, 0.2964914,
0.3021818, 0.5107155, 1.5018185, 1.4227275, 0.4771676, 0.3337901,
0.3426781, 0.5751629, 1.3612882, 1.6905351, 0.4739557, 0.7333461,
0.3529466, 0.5460776, 1.3780758, 1.1202237, 0.4549728, 0.5627663,
0.2780384)), class = "data.frame", row.names = c(NA, -28L))
我正在使用 facet_wrap() 在一页上绘制 7 种空气质量污染物。我想将数据框中使用的缩写(例如“PM”)中的各个绘图标签重命名为长格式(例如“Fine Particulate Matter (ug/m3)”),并希望在其中包含一个上标标签 (ug/m^3)。更改标签时找不到合并上标的方法。
我的没有上标的代码工作正常:
> SeasonalMean
Pollutant Season mean cv
1: SO2 Winter 4.3594786 1.2606103
2: NO Winter 4.8086810 1.3138420
3: NO2 Winter 13.4610992 0.4983027
4: NOX Winter 18.2377363 0.6503697
5: CO Winter 0.2578629 0.3373904
6: O3 Winter 25.0978910 0.4094255
7: PM Winter 9.4271302 0.5599974
8: NOX Spring 14.1144831 0.6320194
9: CO Spring 0.2198282 0.2964914
10: O3 Spring 26.2944466 0.3021818
11: PM Spring 7.7559475 0.5107155
12: SO2 Spring 2.7709979 1.5018185
13: NO Spring 3.3221394 1.4227275
14: NO2 Spring 10.7621779 0.4771676
15: CO Summer 0.2332291 0.3337901
16: O3 Summer 25.8531689 0.3426781
17: PM Summer 8.5609107 0.5751629
18: SO2 Summer 3.2485138 1.3612882
19: NO Summer 4.3011274 1.6905351
20: NO2 Summer 11.4917325 0.4739557
21: NOX Summer 15.8515746 0.7333461
22: O3 Fall 25.3569794 0.3529466
23: PM Fall 8.0808294 0.5460776
24: SO2 Fall 3.7543985 1.3780758
25: NO Fall 3.1074317 1.1202237
26: NO2 Fall 11.8911633 0.4549728
27: NOX Fall 15.0387167 0.5627663
28: CO Fall 0.2378491 0.2780384
new_labels <- c("CO" = "Carbon Monoxide (ppb)", "NO" = "Nitric Oxide (ppb)", "NO2" = "Nitrogen Dioxide (ppb)", "NOX" = "Nitrogen Oxides (ppb)", "O3" = "Ground-Level Ozone (ppb)", "SO2" = "Sulphur Dioxide (ppb)", "PM" = "Fine Particulate Matter (ug/m^3)")
p1 <- ggplot(SeasonalMean, aes(x = Season, y = mean)) +
facet_wrap(~ Pollutant, scales = "free", labeller = labeller(Pollutant = new_labels)) +
geom_point() +
labs(title = "Average Seasonal Air Pollutant Concentrations in Hamilton Downtown (2017)", x = "Season", y = "Mean") +
theme(axis.text.x = element_text(angle = 90, vjust=0.5), plot.title = element_text(hjust = 0.5))
我查看了其他一些问题,但找不到在使用上标的同时组合更改方面标签的任何问题:How do I include a superscript to texts on a plot on R?, Superscript in R, Subscripts in plots in R, How to change facet labels?
我的尝试包括在制作标签名称列表时使用 expression() 和 bquote():
new_labels <- c("CO" = "Carbon Monoxide (ppb)", "NO" = "Nitric Oxide (ppb)", "NO2" = "Nitrogen Dioxide (ppb)", "NOX" = "Nitrogen Oxides (ppb)", "O3" = "Ground-Level Ozone (ppb)", "SO2" = "Sulphur Dioxide (ppb)", "PM" = expression("Fine Particulate Matter (ug/m^3)"))
但这只是使整个列表成为一个表达式:
> new_labels
expression(CO = "Carbon Monoxide (ppb)", NO = "Nitric Oxide (ppb)",
NO2 = "Nitrogen Dioxide (ppb)", NOX = "Nitrogen Oxides (ppb)",
O3 = "Ground-Level Ozone (ppb)", SO2 = "Sulphur Dioxide (ppb)",
PM = "Fine Particulate Matter (ug/m^3)")
我还尝试在 facet_wrap() 的 labeller() 参数中使用 expression() 和 bquote(),但这会导致绘图标签的 none 发生变化:
p1 <- ggplot(SeasonalMean, aes(x = Season, y = mean)) +
facet_wrap(~ Pollutant, scales = "free", labeller = labeller(Pollutant = expression(new_labels))) +
geom_point() +
labs(title = "Average Seasonal Air Pollutant Concentrations in Hamilton Downtown (2017)", x = "Season", y = "Mean") +
theme(axis.text.x = element_text(angle = 90, vjust=0.5), plot.title = element_text(hjust = 0.5))
抱歉,我无法包含任何地块图片,在此先感谢!
用 ggtext
试试这个 tidyverse
解决方案。这意味着数据框中的标签与向量中的标签相似。然后加入它们并使用新添加的变量,其中包含 facet 选项内的标签。之后,您可以将条带文本格式化为 class element_markdown()
。这里的代码:
library(tidyverse)
library(ggtext)
#Labels
Datalabels <- data.frame(Pollutant=c("CO","NO","NO2","NOX","O3","SO2","PM"),
Lab=c("Carbon Monoxide (ppb)","Nitric Oxide (ppb)","Nitrogen Dioxide (ppb)",
"Nitrogen Oxides (ppb)","Ground-Level Ozone (ppb)","Sulphur Dioxide (ppb)",
"Fine Particulate Matter (ug/m^3)"),stringsAsFactors = F)
#Plot
SeasonalMean %>% left_join(Datalabels) %>%
ggplot(aes(x = Season, y = mean)) +
facet_wrap(~ Lab, scales = "free") +
geom_point() +
labs(title = "Average Seasonal Air Pollutant Concentrations in Hamilton Downtown (2017)",
x = "Season", y = "Mean") +
theme(axis.text.x = element_text(angle = 90, vjust=0.5),
plot.title = element_text(hjust = 0.5),
strip.text = element_markdown())
输出:
使用了一些数据:
#Data
SeasonalMean <- structure(list(Pollutant = c("SO2", "NO", "NO2", "NOX", "CO",
"O3", "PM", "NOX", "CO", "O3", "PM", "SO2", "NO", "NO2", "CO",
"O3", "PM", "SO2", "NO", "NO2", "NOX", "O3", "PM", "SO2", "NO",
"NO2", "NOX", "CO"), Season = c("Winter", "Winter", "Winter",
"Winter", "Winter", "Winter", "Winter", "Spring", "Spring", "Spring",
"Spring", "Spring", "Spring", "Spring", "Summer", "Summer", "Summer",
"Summer", "Summer", "Summer", "Summer", "Fall", "Fall", "Fall",
"Fall", "Fall", "Fall", "Fall"), mean = c(4.3594786, 4.808681,
13.4610992, 18.2377363, 0.2578629, 25.097891, 9.4271302, 14.1144831,
0.2198282, 26.2944466, 7.7559475, 2.7709979, 3.3221394, 10.7621779,
0.2332291, 25.8531689, 8.5609107, 3.2485138, 4.3011274, 11.4917325,
15.8515746, 25.3569794, 8.0808294, 3.7543985, 3.1074317, 11.8911633,
15.0387167, 0.2378491), cv = c(1.2606103, 1.313842, 0.4983027,
0.6503697, 0.3373904, 0.4094255, 0.5599974, 0.6320194, 0.2964914,
0.3021818, 0.5107155, 1.5018185, 1.4227275, 0.4771676, 0.3337901,
0.3426781, 0.5751629, 1.3612882, 1.6905351, 0.4739557, 0.7333461,
0.3529466, 0.5460776, 1.3780758, 1.1202237, 0.4549728, 0.5627663,
0.2780384)), class = "data.frame", row.names = c(NA, -28L))