问题描述
我正在使用facet_wrap()在1页上绘制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)","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(),但这不会导致任何情节标签发生变化:
p1 <- ggplot(SeasonalMean,labeller = labeller(Pollutant = expression(new_labels))) +
geom_point() +
labs(title = "Average Seasonal Air Pollutant Concentrations in Hamilton Downtown (2017)",plot.title = element_text(hjust = 0.5))
对不起,我无法提供任何地块的图片,谢谢!
解决方法
尝试使用tidyverse
的{{1}}解决方案。这将意味着在数据框中具有与矢量中相似的标签。然后将它们连接起来,并使用新添加的变量,该变量在facet选项中包含标签。之后,您可以将带状文本的格式设置为ggtext
类。这里的代码:
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())