#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 раз больше, чем потребление, поэтому столбцы не могут отображаться вместе