首页 > 解决方案 > 多图校正

问题描述

从下面的数据和代码中,我尝试制作多图,但问题是塑料消费与塑料生产重叠,我希望两者相互聚集而不重叠。

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))
data=read.csv("PPPP.csv")

library(ggplot2)

library(tidyr)

library(dplyr)

 ggplot(data) + 
   geom_col(aes(x = Country, y = Plastic.Production.Kt.), size = 1, color = "black", fill = "blue") + 
   geom_col(aes(x = Country, y = 400*Plastic.Consumption), size = 1, color="black", fill = "red") + 
   scale_y_continuous(sec.axis = sec_axis(~./400, name = "Plastic Consumption"))+ 
   geom_line(aes(x = Country, y = Plastic.Waste.Mismanagemet..kt.), size = 2, color="black", group = 1)

在此处输入图像描述

标签: r

解决方案


你需要躲避酒吧。目前,您只是在绘制另一个。因为您对 有两个不同的调用geom_col,所以您只是在另一个之上绘制一个。您需要重新调整数据,以便在单个列中同时包含塑料消耗量和生产量,并使用不同的列标记每个值,以确定它是指生产量还是消费量。这称为长格式。一旦你有了这个,你可以将填充颜色映射到生产或消费。这不仅可以让您躲避横条,还可以创建一个图例。这个情节真的需要一个传说,因为目前你无法知道哪种颜色是生产,哪种颜色是消费。

出于同样的原因,您应该将线条映射到颜色美学,以便它出现在图例中。否则,没有指示该行的含义。

data %>%
  mutate(Plastic.Consumption = 400 * Plastic.Consumption) %>%
  pivot_longer(2:3) %>%
  ggplot() + 
  geom_col(aes(x = Country, y = value, fill = name), 
           size = 1, color = "black", position = "dodge") + 
  geom_line(aes(x = Country, y = Plastic.Waste.Mismanagemet..kt.,
                color = "Mismanagement"), 
            size = 2, group = 1) +
  scale_color_manual(values = "black", name = "") +
  scale_y_continuous(name = "Plastic Production (Kt)",
                     sec.axis = sec_axis(~./400, name = "Plastic Consumption")) +
  scale_fill_manual(values = c("red", "blue"), name = "")

在此处输入图像描述


推荐阅读