Построение другого масштабирования по оси Y с использованием ggplot facet_grid()?

У меня возникают проблемы с нанесением некоторых данных на две отдельные шкалы Y. Вот две визуализации некоторых данных о качестве воздуха, с которыми я работал. На первом рисунке каждый загрязнитель изображен по шкале y в долях на миллиард. На этом рисунке co доминирует над осью Y, и никакие другие изменения загрязняющих веществ не представлены должным образом. В науке о качестве воздуха загрязнитель co обычно выражается в частях на миллион, а не в частях на миллиард. На втором рисунке показаны те же данные no, no2 и o3, но я преобразовал концентрацию co из ppb в ppm (разделить на 1000). Однако, хотя no, no2 и o3 выглядят лучше, вариация co представлена ​​не совсем верно...

Есть ли простой способ с помощью ggplot() нормализовать шкалу оси Y и наилучшим образом представить каждый тип загрязнителя? Я также пытаюсь проработать некоторые другие примеры, в которых используется gridExtra для объединения двух отдельных графиков, каждый из которых сохраняет свои исходные y-шкалы.

Данные, необходимые для создания этих цифр, огромны (26 295 наблюдений), поэтому я все еще работаю над воспроизводимым примером. Надеемся, что решение можно найти в коде ggplot(), описанном ниже:

plt <- ggplot(df, aes(x=date, y = value, color = pollutant)) + 
    geom_point() + 
    facet_grid(id~pollutant, labeller = label_both, switch = "y")
plt

Вот как выглядит head(df) (до преобразования co в ppm):

                 date   id pollutant  value
1 2017-06-16 10:00:00 Pohl        co 236.00
2 2017-06-16 10:00:00 Pohl        no  23.06
3 2017-06-16 10:00:00 Pohl       no2  12.05
4 2017-06-16 10:00:00 Pohl        o3   8.52
5 2017-06-16 11:00:00 Pohl        co 207.00
6 2017-06-16 11:00:00 Pohl        no  20.82

Рисунок 1

Рисунок 2


person philiporlando    schedule 13.09.2017    source источник
comment
facet_grid(..., scales = "free_y") позволяет каждой строке иметь разную шкалу Y, но вам, возможно, придется переключить грань строки/столбца, например facet_grid(pollutant ~ id, scales = "free_y")   -  person Marius    schedule 13.09.2017
comment
Вы можете поместить свое решение в качестве ответа вместо того, чтобы добавлять его к своему вопросу, а затем пометить его как решенное.   -  person aosmith    schedule 13.09.2017
comment
Хорошо, я сделаю это. Я не был уверен, что это кошерно, поскольку Мариус формально отвечал на вопрос.   -  person philiporlando    schedule 14.09.2017


Ответы (1)


Мариус указал, что включение scales = "free_y" в функцию facet_grid() даст желаемый результат. Спасибо!

Решение:

plt <- ggplot(df, aes(x=date, y = value, color = pollutant)) + 
geom_point() + 
facet_grid(pollutant~id, scales = "free_y", labeller = label_both, switch = "y")
plt

Вывод:

введите здесь описание изображения

person philiporlando    schedule 13.09.2017