R:定义两个特征的ggplot箱形图的轴

时间:2020-10-28 11:01:36

标签: r ggplot2 boxplot

我有一个小型的煤和可再生能源年度能源消耗(埃焦耳)数据集:

   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

我想实现以下代码,以便获得与图片相似的输出: enter image description here

但是,我不清楚如何定义各个列中的轴。

如何设置轴以实现与图片所示轴相似的输出?

1 个答案:

答案 0 :(得分:1)

这是一个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

enter image description here

这里是使用构面的另一种方法,因此第二个箱形图更易于阅读。您将失去直接比较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")

enter image description here

这里是数据的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))