ggplot2 - фасетирование одних переменных с сохранением других на одном графике - PullRequest
0 голосов
/ 16 июня 2020

Я хотел бы знать, как лучше всего построить некоторые переменные на разных графиках, оставив другие на одном графике.

В приведенном ниже примере я хотел бы, чтобы Temperature_sensor_1 и Temperature_sensor_1 были на одном графике (каждый датчик как отдельная линия), тогда как другие переменные отображались отдельно.

Я могу сделать это, создав переменную, в которой объединены оба измерения температуры, а затем использовать цвет линии aestheti c для разделения на каждый тип датчика.

library(tidyverse)

df_results <- data.frame(
  Time_point =seq(0, 19, by=1),
  Alitude=rnorm(20, mean=50, sd=2),
  Temperature_sensor_1=rnorm(20, mean=40, sd=2),
  Temperature_sensor_2=rnorm(20, mean=45, sd=2),
  Pressure=rnorm(20, mean=20, sd=2)
)

df_results<-df_results%>%
  pivot_longer(-Time_point,names_to = "Measurement")

#create new variables
df_results<-df_results%>%
  mutate(Measurement_type = if_else(grepl("^T",Measurement),"Temperature",Measurement))%>%
  mutate(Sensor_ID = if_else(grepl("Temp",Measurement_type),Measurement,"NA"))

ggplot(df_results, aes(x=Time_point, y=value))+
  geom_line(aes(colour = Sensor_ID), size=1)+  
  facet_wrap(~Measurement_type,scales = "fixed")

Создание нового переменные кажутся неправильными, и я бы хотел избежать "NA". Есть ли способ лучше?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 16 июня 2020

, вы можете создать новый столбец с mutate и case_when и использовать его для создания фасета.

library(tidyverse)

df_results <- data.frame(
  Time_point =seq(0, 19, by=1),
  Alitude=rnorm(20, mean=50, sd=2),
  Temperature_sensor_1=rnorm(20, mean=40, sd=2),
  Temperature_sensor_2=rnorm(20, mean=45, sd=2),
  Pressure=rnorm(20, mean=20, sd=2)
)

df_results<-df_results%>%
  pivot_longer(-Time_point,names_to = "Measurement")

df_results <- df_results %>% 
  mutate(newVar = case_when(
    Measurement %in% c('Temperature_sensor_1', 'Temperature_sensor_2') ~ 'Temperatures',
    Measurement == 'Alitude' ~ 'Altitude',
    Measurement == 'Pressure' ~ 'Pressure'
  ))

ggplot(df_results, aes(x=Time_point, y=value))+
  geom_line(aes(colour = Measurement), size=1)+  
  facet_wrap(~newVar,scales = "fixed")

Создано 2020- 06-16 с помощью пакета REPEX (v0.3.0)

0 голосов
/ 16 июня 2020

Как я понимаю, у вас есть Measurement_type, а у вас Sensor_ID. Чтобы избежать НА, как насчет того, чтобы просто понять, что эти бедные старые датчики высоты и давления тоже нуждаются в идентификаторах! Если есть только 1 датчик, это «Датчик 1». Если есть два датчика, у вас есть «Датчик 1» и «Датчик 2». Другими словами, попробуйте изменить свой раздел # create new variables на это:

df_results<-df_results%>%
  mutate(Measurement_type = if_else(grepl("^T",Measurement),"Temperature",Measurement)) %>%
  mutate(Sensor_ID = if_else(grepl("sensor_2",Measurement),"Sensor 2","Sensor 1"))

Запуск того же кода сюжета дает следующее:

enter image description here

...