Удаление NA из оси x ggplot в ggplot2 - PullRequest
1 голос
/ 05 февраля 2020

Я хотел бы избавиться от всего блока NA (выделено здесь ). Я пытался na.ommit и na.rm = TRUE безуспешно.

Вот код, который я использовал:

library(readxl)
data <- read_excel("Documents/TFB/xlsx_geochimie/solfatara_maj.xlsx")
View(data)
data <- gather(data,FeO:`Fe2O3(T)`,key = "Element",value="Pourcentage")
library(ggplot2)
level_order <- factor(data$Element,levels = c("SiO2","TiO2","Al2O3","Fe2O3","FeO","MgO","CaO","Na2O","K2O"))
ggplot(data=data,mapping=aes(x=level_order,y=data$Pourcentage,colour=data$Ech)+geom_point()+geom_line(group=data$Ech) +scale_y_log10()    

А вот мой оригинальный файл https://drive.google.com/file/d/1bZi7fPWebbpodD1LFScoEcWt5Bs-cqhb/view?usp=sharing

Ответы [ 2 ]

1 голос
/ 05 февраля 2020

Если я запускаю ваш код и смотрю на data, который входит в ggplot:

table(data$Element)
  Al2O3      CaO    Fe2O3 Fe2O3(T)      FeO      K2O      LOI     LOI2      MgO      MnO 
      12       12       12       12       12       12       12       12       12       12 
    Na2O     P2O5     SiO2      SO4     TiO2    Total  Total 2  Total N  Total S 
      12       12       12       12       12       12       12       12       12 

Вы включили Total в фрейм с потертыми данными, который, я думаю, не предназначен. Следовательно, когда вы учитываете эти факторы, и эти «Всего ...» не включаются в уровни, они становятся NA.

Таким образом, мы можем сделать это с нуля:

data <- read_excel("solfatara_maj.xlsx")

data:

structure(list(Ech = c("AGN 1A", "AGN 2A", "AGN 3B", "SOL 4B", 
"SOL 8Ag", "SOL 8Ab", "SOL 16A", "SOL 16B", "SOL 16C", "SOL 22 A", 
"SOL 22D", "SOL 25B"), FeO = c(0.2, 0.8, 1.7, 0.3, 1.7, NA, 0.2, 
NA, 0.1, 0.7, 1.3, 2), `Total S` = c(5.96, 45.3, 0.22, 17.3, 
NA, NA, NA, NA, NA, NA, 2.37, 0.36), SO4 = c(NA, 6.72, NA, 4.08, 
0.06, 0.16, 42.2, 35.2, 37.8, 0.32, 6.57, NA), `Total N` = c(NA, 
NA, NA, NA, NA, NA, NA, NA, NA, 15.2, NA, NA), SiO2 = c(50.2, 
31.05, 56.47, 62.14, 61.36, 75.66, 8.41, 21.74, 17.44, 13.52, 
19.62, 56.35), Al2O3 = c(15.53, 7.7, 17.56, 4.44, 17.75, 10.92, 
31.92, 26.38, 27.66, 0.64, 3.85, 17.28), Fe2O3 = c(0.49, 0.63, 
2.06, NA, 1.76, 0.11, 0.64, 0.88, 1.71, NA, 1.32, 2.67), MnO = c(0.01, 
0.01, 0.13, 0.01, 0.09, 0.01, 0.01, 0.01, 0.01, 0.005, 0.04, 
0.12), MgO = c(0.06, 0.07, 0.88, 0.03, 0.97, 0.05, 0.04, 0.07, 
0.03, 0.02, 1.85, 1.63), CaO = c(0.2, 0.09, 3.34, 0.09, 2.58, 
0.57, 0.2, 0.26, 0.15, 0.06, 35.66, 4.79), Na2O = c(0.15, 0.14, 
3.23, 0.13, 3.18, 2.04, 0.68, 0.68, 0.55, 0.05, 0.45, 3.11), 
    K2O = c(4.39, 1.98, 8, 1.26, 8.59, 5.94, 8.2, 6.97, 8.04, 
    0.2, 0.89, 7.65), TiO2 = c(0.42, 0.27, 0.46, 0.79, 0.55, 
    0.16, 0.09, 0.22, 0.16, 0.222, 0.34, 0.53), P2O5 = c(0.11, 
    0.09, 0.18, 0.08, 0.07, 0.07, 0.85, 0.68, 0.62, NA, 0.14, 
    0.28), LOI = c(27.77, 57.06, 6.13, 29.03, 1.38, 4.92, 42.58, 
    37.58, 38.76, NA, 26.99, 3.92), LOI2 = c(27.79, 57.15, 6.32, 
    29.06, 1.57, 4.93, 42.6, 37.59, 38.77, 0.08, 27.13, 4.15), 
    Total = c(99.52, 99.88, 100.2, 98.25, 99.99, 100.5, 93.81, 
    95.57, 95.23, 15.25, 92.45, 100.3), `Total 2` = c(99.54, 
    99.96, 100.3, 98.28, 100.2, 100.6, 93.83, 95.58, 95.24, 15.33, 
    92.59, 100.6), `Fe2O3(T)` = c(0.71, 1.52, 3.95, 0.27, 3.65, 
    0.22, 0.87, 0.99, 1.82, 0.61, 2.76, 4.9)), row.names = c(NA, 
-12L), class = c("tbl_df", "tbl", "data.frame"))

Сначала мы устанавливаем уровень печати, как вы:

plotlvls = c("SiO2","TiO2","Al2O3","Fe2O3","FeO","MgO","CaO","Na2O","K2O")

Затем мы выбираем только эти столбцы, а также Ech, обратите внимание, я использую pivot_longer(), потому что gather() предположительно будет объявлено устаревшим, а затем мы также выполните факторинг:

plotdf = data %>% select(c(plotlvls,"Ech")) %>% 
pivot_longer(-Ech,names_to = "Element",values_to = "Pourcentage") %>%
mutate(Element=factor(Element,levels=toplot))

Наконец, мы строим график, и нет NA:

ggplot(data=plotdf,mapping=aes(x=Element,y=Pourcentage,colour=Ech))+
geom_point()+geom_line(aes(group=Ech)) +scale_y_log10()

enter image description here

1 голос
/ 05 февраля 2020

1.Создать воспроизводимые минимальные данные

data <- data.frame(Element = c("SiO2","TiO2","Al2O3","Fe2O3","FeO","MgO","CaO","Na2O","K2O",NA),
                   Pourcentage = 1:10,
                   Ech = c("AGN 1A", "SOL 16"))

2.Установить уровни факторов для переменной «Элемент»

data$Element <- factor(data$Element,levels = c("SiO2","TiO2","Al2O3","Fe2O3","FeO","MgO","CaO","Na2O","K2O"))

3.Удалить строки, содержащие NA, в переменной «Элемент»

data <- data[!is.na(data$Element), ]

4.Произвести данные с использованием ggplot2 (синтаксис ggplot2 использует NSE (нестандартная оценка), что означает, что вам не нужно передавать имена переменных в виде строк или с использованием записи $):

ggplot(data=data,aes(x=Element,y=Pourcentage,colour=Ech)) +
  geom_point() +
  geom_line(aes(group=Ech)) +
  scale_y_log10()  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...