Как я могу сделать мультиплотность в R

#r #ggplot2 #lattice

#r #ggplot2 #решетка

Вопрос:

У меня есть этот набор данных, я хочу сделать тройную ось y, где «Страна» будет осью X. на оси y я хочу сделать два кластеризованных столбца с перекрытием одного линейного графика. Я новый пользователь, учусь в течение 16 дней

 dput(data)

structure(list(Country = c("China", "Indonesia", "Vietnam", "Thailand", 
"Egypt", "India", "Turkey", "Brazil", "United States", "Russia"
), Plastic.Consumption = c(44.14201935, 12.87658986, 23.6336878, 
52.92058216, 13.93164324, 6.994354455, 64.77526757, 31.53076177, 
87.30070657, 32.01972449), Plastic.Production.Kt. = c(42421L, 
2258L, 387L, 5881L, 411L, 7211L, 939L, 5860L, 33985L, 3487L), 
    Plastic.Waste.Mismanagemet..kt. = c(8819.716784, 3216.855605, 
    1833.819141, 1027.739178, 967.0123574, 599.8191155, 485.937142, 
    471.4039969, 275.4244968, 80.75948103)), class = "data.frame", 
row.names = c(NA, -10L))
 

Ответ №1:

Добро пожаловать в SO. Вот ресурс, который демонстрирует, почему две оси Y — плохая идея ссылки. Вот несколько примеров других вариантов.

 
library(tidyverse)

df <- structure(list(Country = c("China", "Indonesia", "Vietnam", "Thailand", 
                           "Egypt", "India", "Turkey", "Brazil", "United States", "Russia"
), Plastic.Consumption = c(44.14201935, 12.87658986, 23.6336878, 
                           52.92058216, 13.93164324, 6.994354455, 64.77526757, 31.53076177, 
                           87.30070657, 32.01972449), Plastic.Production.Kt. = c(42421L, 
                                                                                 2258L, 387L, 5881L, 411L, 7211L, 939L, 5860L, 33985L, 3487L), 
Plastic.Waste.Mismanagemet..kt. = c(8819.716784, 3216.855605, 
                                    1833.819141, 1027.739178, 967.0123574, 599.8191155, 485.937142, 
                                    471.4039969, 275.4244968, 80.75948103)), class = "data.frame", 
row.names = c(NA, -10L))

ggplot(df,aes(Country,Plastic.Consumption,size = Plastic.Waste.Mismanagemet..kt.,color = Plastic.Waste.Mismanagemet..kt.))   
  geom_point()
 

 

df %>% 
  pivot_longer(2:4) %>% 
  ggplot(aes(Country,value))   
  geom_point()   
  coord_flip()   
  facet_wrap(~name,scales = 'free')
 

Создано 2020-12-09 пакетом reprex (версия 0.3.0)

Удачи вам!

Ответ №2:

Несмотря на предупреждения об использовании вторичных осей, вот как вы можете создать график, который вы описываете, на основе данных, которыми вы поделились:

 library(ggplot2)
library(tidyr)
library(dplyr)

data %>% 
  mutate(Country = forcats::fct_reorder(Country, -Plastic.Production.Kt.)) %>%
  pivot_longer(3:4) %>% 
  ggplot(aes(Country, value, fill = name))  
  geom_col(position = position_dodge())  
  geom_line(aes(y = Plastic.Consumption * 400, group = 1, 
                color = "Consumption"), size = 1)  
  scale_color_manual(values = "black", name = "")  
  scale_fill_manual(values = c("orange", "deepskyblue4"), name = "",
                    labels = c("Plastic production", 
                               "Plastic waste mismanagement"))  
  scale_y_continuous(labels = scales::comma, name = "kilotonnes per year",
                     sec.axis = sec_axis(trans = ~ .x/400, 
                                         name = "Consumption (kilotonnes)"))  
  theme_bw()  
  theme(legend.position = "top")
 

Комментарии:

1. Сэр, большое вам спасибо, это была большая помощь, мне просто любопытно, почему вы умножаете потребление пластика на 400? (geom_line(aes(y = Пластик. Потребление * 400, группа = 1) и если я хочу сделать производство и потребление в столбцах и неправильное управление на линейном графике, я могу использовать этот код, заменив переменные?

2. @Kazi если вы хотите отобразить переменные на одном графике, где числа находятся в таких разных масштабах, вам нужно умножить одну из переменных на некоторую константу, чтобы получить ее примерно в том же диапазоне, что и другие, но затем создать вторую ось, числа которой умножаются на обратную величину того же самогоконстанта. В вашем примере это позволяет считывать столбцы с левой оси, но строку с правой оси. Вы не можете просто поменять переменные местами, потому что масштабы очень разные. Ваши производственные показатели примерно в 500 раз больше, чем потребление, поэтому столбцы не могут отображаться вместе