R:定义两个特征的 ggplot box-plot 的轴

R: defining the axes of a ggplot box-plot of two features

我有这个以 EJ(埃焦耳)为单位的煤炭和可再生能源年度能源消耗的小型数据集:

   Year Coal_cons Renewable_cons
1  1965     58.10           0.21
2  1966     58.77           0.23
3  1967     57.82           0.24
4  1968     58.68           0.26
5  1969     60.48           0.27
6  1970     61.41           0.30
7  1971     61.08           0.32
8  1972     61.76           0.35
9  1973     63.60           0.37
10 1974     63.66           0.39
11 1975     64.89           0.39
12 1976     67.28           0.43
13 1977     69.27           0.47
14 1978     70.05           0.51
15 1979     73.31           0.56
16 1980     75.09           0.60
17 1981     76.14           0.63
18 1982     76.98           0.74
19 1983     79.36           0.84
20 1984     82.80           0.96
21 1985     86.35           1.01
22 1986     87.32           1.15
23 1987     90.76           1.21
24 1988     93.47           1.26
25 1989     94.37           1.40
26 1990     93.22           1.58
27 1991     92.31           1.66
28 1992     91.98           1.75
29 1993     92.43           1.82
30 1994     92.78           1.91
31 1995     93.44           2.01
32 1996     95.66           2.04
33 1997     95.50           2.20
34 1998     94.89           2.31
35 1999     95.48           2.46
36 2000     98.70           2.64
37 2001    100.27           2.75
38 2002    104.20           3.10
39 2003    113.39           3.37
40 2004    121.19           3.87
41 2005    130.21           4.37
42 2006    137.05           5.03
43 2007    144.80           5.94
44 2008    146.77           7.16
45 2009    144.53           8.24
46 2010    151.19           9.70
47 2011    158.46          11.12
48 2012    159.07          12.60
49 2013    161.98          14.36
50 2014    161.84          16.03
51 2015    157.84          18.08
52 2016    155.50          20.06
53 2017    156.09          23.04
54 2018    158.79          25.83
55 2019    157.86          28.98

我想实现下面的代码,所以我实现了与图片类似的输出:

但是,我不清楚如何在单独的列中定义轴。

我如何设置我的坐标轴以获得与图片上的相似的输出?

这是一个tidyverse解决方案。

library(tidyverse)

df %>%
  pivot_longer(2:3) %>%   # pivot_longer to one column for names and one for values
  ggplot(aes(x = name, y = value, color = name)) +
  geom_boxplot() +
  geom_point(position = position_jitter(width = 0.3)) # position_jitter for the dots

这是使用分面的替代方法,因此第二个箱线图更易于阅读。你失去了直接比较 y 尺度的能力。

df %>%
  pivot_longer(2:3) %>%
  ggplot(aes(x = name, y = value, color = name)) +
  geom_boxplot() +
  geom_point(position = position_jitter(width = 0.3)) + 
  facet_wrap(~name, scales = "free")

这里是一个dput()的数据。

structure(list(Year = c(1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 
                        1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 
                        1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 
                        1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 
                        2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 
                        2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 
                        2019), 
               Coal_cons = c(58.1, 58.77, 57.82, 58.68, 60.48, 61.41, 61.08, 
                             61.76, 63.6, 63.66, 64.89, 67.28, 69.27, 70.05, 
                             73.31, 75.09, 76.14, 76.98, 79.36, 82.8, 86.35, 
                             87.32, 90.76, 93.47, 94.37, 93.22, 92.31, 91.98, 
                             92.43, 92.78, 93.44, 95.66, 95.5, 94.89, 95.48, 
                             98.7, 100.27, 104.2, 113.39, 121.19, 130.21, 
                             137.05, 144.8, 146.77, 144.53, 151.19, 158.46, 
                             159.07, 161.98, 161.84, 157.84, 155.5, 156.09, 
                             158.79, 157.86), 
               Renewable_cons = c(0.21, 0.23, 0.24, 0.26, 0.27, 0.3, 0.32, 
                                  0.35, 0.37, 0.39, 0.39, 0.43, 0.47, 0.51, 
                                  0.56, 0.6, 0.63, 0.74, 0.84, 0.96, 1.01, 
                                  1.15, 1.21, 1.26, 1.4, 1.58, 1.66, 1.75, 
                                  1.82, 1.91, 2.01, 2.04, 2.2, 2.31, 2.46, 
                                  2.64, 2.75, 3.1, 3.37, 3.87, 4.37, 5.03, 
                                  5.94, 7.16, 8.24, 9.7, 11.12, 12.6, 14.36, 
                                  16.03, 18.08, 20.06, 23.04, 25.83, 28.98)), 
          class = c("spec_tbl_df", "tbl_df", "tbl", "data.frame"), 
          row.names = c(NA, -55L))