在facet_wrap中更改标签时使用上标

问题描述

我正在使用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 RSubscripts in plots in RHow 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()

输出:

enter image description here

使用了一些数据:

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())

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...