Używam Facet_Wrap (), aby wykreślić 7 zanieczyszczeń jakości powietrza na 1 stronie. Chcę zmienić nazwę poszczególnych etykiet wykresowych z skrótu używanego w moim dataframe (np. "PM") do długiej formy (np. "Dobra cząsteczka (UG / M3)") i chcesz dołączyć supercript w jednym z Etykiety (UG / M ^ 3). Nie mogę znaleźć sposobu na zintegrowania indeksów podczas zmiany etykiet.

Mój kod bez nadrzutów działa dobrze:

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

Spojrzałem na kilka innych pytań, ale nie mogłem znaleźć żadnych połączonych etykietami facet, a jednocześnie za pomocą superScript: jak mam dołączyć superscript do tekstów na działce na r?, Superscript w R, Subskrypcje na działkach w R , Jak zmienić etykiety FACET?

Moje próby uwzględniono przy użyciu wyrażenia () i bubote () podczas wykonywania listy nazw etykiet:

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

Ale to sprawia, że cała lista wyrażenie:

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

I próbowałem również używać wyrażenia () i bruteście () w parametrze Labeller () Facet_Wrap (), ale powoduje to żadne z etykiet wykresowych zmiany:

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

Niestety nie jestem w stanie uwzględnić żadnych zdjęć działek, dzięki z góry!

0
Christine Nielsen 11 październik 2020, 18:26

1 odpowiedź

Najlepsza odpowiedź

Wypróbuj rozwiązanie tidyverse za pomocą ggtext. Wyznaczałoby to etykiety w dataframe podobnym jak te w wektorze. Następnie dołączenie do nich i przy użyciu nowej zmiennej dodanej, która zawiera etykiety wewnątrz opcji FACET. Następnie możesz sformatować tekst paska, aby być klasy element_markdown(). Tutaj kod:

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

Wynik:

enter image description here

Niektóre wykorzystane dane:

#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))
0
Duck 11 październik 2020, 16:02