簡體   English   中英

兩個 geom_line() 各有一個 y 軸

[英]Two geom_line()s with an y-axis each

我想制作一個包含兩個變量的時間序列的 plot - 但它們的比例非常不同。 所以我想要 plot 一行跟隨左 y 軸的刻度(比如,以百萬為單位),另一行跟隨第二個右 y 軸(低百分比刻度)。 有人知道怎么做嗎? 我已經實現了按照我的意願放置兩個 y 軸刻度,但我需要其中一條線(繪制的兩個變量之一)跟隨右側的 y 軸。 這是一段代碼。 它還不是超級整潔,但為了我的目的,它應該可以工作。

europe_data %>% 
  rename(`Inflation Rate` = EA19CPALTT01GYM,
         `Money Supply` = MYAGM2EZM196N) %>% 
  mutate(`Inflation Rate` = (`Inflation Rate` * 100)) %>% 
  ggplot(aes(x = DATE)) +
  geom_line(aes(y = `Inflation Rate`),
                linetype = "dashed") +
  geom_line(aes(y = `Money Supply`)) +
  scale_y_continuous(name = "Inflation Rate",
                     sec.axis = sec_axis(~ . / 1000000000000,
                                         name = "Money Supply"))

提前致謝。

我可以給你一個使用base的解決方案。 您可以使用此代碼:

首先我創建了一個示例數據集:

europe_data <- data.frame(EA19CPALTT01GYM= c(0.1, 1, 1.1, 1.2, 1.4, 1),
                          MYAGM2EZM196N = c(1000000000000, 1102010000200, 1040000607000, 1200030000000, 1000040507808, 1304006060300),
                          DATE = seq(0, 5, 1))

之后,您可以使用此代碼:

europe_data <- europe_data %>% 
  rename(`Inflation Rate` = EA19CPALTT01GYM,
         `Money Supply` = MYAGM2EZM196N) %>% 
  mutate(`Inflation Rate` = (`Inflation Rate` * 100))

par(mar = c(5, 4, 4, 2) + 3, new=TRUE)
## Plot first set of data and draw its axis
plot(europe_data$DATE, europe_data$`Inflation Rate`, pch=16, axes=FALSE, ylim=c(0,200), xlab="", ylab="", 
     type="b",col="black", main="Your title")
axis(2, ylim=c(0,200),col="black",las=1)  ## las=1 makes horizontal labels
mtext("Inflation rate",side=2,line=2.5)
box()

## Allow a second plot on the same graph
par(mar = c(5, 4, 4, 2) + 3, new=TRUE)
#par(new=TRUE)

## Plot the second plot and put axis scale on right
plot(europe_data$DATE, europe_data$`Money Supply`, pch=15,  xlab="", ylab="", ylim=c(0,1300000000000), 
     axes=FALSE, type="b", col="red")
## a little farther out (line=4) to make room for labels
mtext("Money supply",side=4,col="red",line=4) 
axis(4, ylim=c(0,1300000000000), col="red",col.axis="red",las=1)

## Draw the time axis
axis(1,pretty(range(europe_data$DATE),10))
mtext("Date",side=1,col="black",line=2.5)  

## Add Legend
legend("bottomright",legend=c("Inflation rate","Money supply"),
       text.col=c("black","red"),pch=c(16,15),col=c("black","red"))

Output: 在此處輸入圖像描述

在創建帶有第二個軸的 plot 時,您需要記住該軸僅用於“裝飾”。 添加輔助軸並不意味着數據將以相同的比例顯示。 您還需要修改第二個軸上表示的數據,使其與第一個軸上表示的數據的比例大致相同。 在這里,你的通貨膨脹數據大約在-1到4之間,但是你的貨幣供應量大約是5到12萬億。 因此,您需要將貨幣供應量除以大約 5 萬億 (2 * 10^13),才能得到與通貨膨脹相同的規模。 然后,無論你對數據做了什么,你都會在次軸上反轉。 因為這些數字太大了,人們很難讀懂,所以我實際上只是乘以 5 而不是 5 萬億,而 label 軸顯示萬億:

library(ggplot2)
library(dplyr)

europe_data %>% 
  rename(`Inflation Rate` = EA19CPALTT01GYM,
         `Money Supply` = MYAGM2EZM196N) %>% 
  ggplot(aes(x = DATE)) +
  geom_line(aes(y = `Inflation Rate`),
                linetype = "dashed") +
  geom_line(aes(y = `Money Supply` / (5 * 10^12))) +
  scale_y_continuous(name = "Inflation Rate",
                     sec.axis = sec_axis(~ . * 5,
                                         name = "Money Supply (trillions)"))

reprex package (v2.0.1) 創建於 2022-03-12


數據

europe_data <-
  structure(list(DATE = structure(c(9862, 9893, 9921, 9952, 9982, 
10013, 10043, 10074, 10105, 10135, 10166, 10196, 10227, 10258, 
10286, 10317, 10347, 10378, 10408, 10439, 10470, 10500, 10531, 
10561, 10592, 10623, 10651, 10682, 10712, 10743, 10773, 10804, 
10835, 10865, 10896, 10926, 10957, 10988, 11017, 11048, 11078, 
11109, 11139, 11170, 11201, 11231, 11262, 11292, 11323, 11354, 
11382, 11413, 11443, 11474, 11504, 11535, 11566, 11596, 11627, 
11657, 11688, 11719, 11747, 11778, 11808, 11839, 11869, 11900, 
11931, 11961, 11992, 12022, 12053, 12084, 12112, 12143, 12173, 
12204, 12234, 12265, 12296, 12326, 12357, 12387, 12418, 12449, 
12478, 12509, 12539, 12570, 12600, 12631, 12662, 12692, 12723, 
12753, 12784, 12815, 12843, 12874, 12904, 12935, 12965, 12996, 
13027, 13057, 13088, 13118, 13149, 13180, 13208, 13239, 13269, 
13300, 13330, 13361, 13392, 13422, 13453, 13483, 13514, 13545, 
13573, 13604, 13634, 13665, 13695, 13726, 13757, 13787, 13818, 
13848, 13879, 13910, 13939, 13970, 14000, 14031, 14061, 14092, 
14123, 14153, 14184, 14214, 14245, 14276, 14304, 14335, 14365, 
14396, 14426, 14457, 14488, 14518, 14549, 14579, 14610, 14641, 
14669, 14700, 14730, 14761, 14791, 14822, 14853, 14883, 14914, 
14944, 14975, 15006, 15034, 15065, 15095, 15126, 15156, 15187, 
15218, 15248, 15279, 15309, 15340, 15371, 15400, 15431, 15461, 
15492, 15522, 15553, 15584, 15614, 15645, 15675, 15706, 15737, 
15765, 15796, 15826, 15857, 15887, 15918, 15949, 15979, 16010, 
16040, 16071, 16102, 16130, 16161, 16191, 16222, 16252, 16283, 
16314, 16344, 16375, 16405, 16436, 16467, 16495, 16526, 16556, 
16587, 16617, 16648, 16679, 16709, 16740, 16770, 16801, 16832, 
16861, 16892, 16922, 16953, 16983, 17014, 17045, 17075, 17106, 
17136, 17167, 17198, 17226), class = "Date"), MYAGM2EZM196N = c(3.499192e+12, 
3.493103e+12, 3.500177e+12, 3.498558e+12, 3.516345e+12, 3.549216e+12, 
3.54237e+12, 3.531781e+12, 3.543278e+12, 3.555327e+12, 3.587644e+12, 
3.687146e+12, 3.658509e+12, 3.660611e+12, 3.666889e+12, 3.698172e+12, 
3.727306e+12, 3.758294e+12, 3.725595e+12, 3.718421e+12, 3.725841e+12, 
3.740075e+12, 3.789869e+12, 3.920142e+12, 3.95326e+12, 3.911195e+12, 
3.929382e+12, 3.950654e+12, 3.979502e+12, 4.005344e+12, 4.021979e+12, 
3.991118e+12, 4.000412e+12, 4.019772e+12, 4.049147e+12, 4.142298e+12, 
4.137751e+12, 4.133651e+12, 4.143894e+12, 4.186038e+12, 4.177617e+12, 
4.186421e+12, 4.184938e+12, 4.176869e+12, 4.1825e+12, 4.187284e+12, 
4.210799e+12, 4.29963e+12, 4.348576e+12, 4.355581e+12, 4.38508e+12, 
4.422968e+12, 4.445379e+12, 4.492195e+12, 4.479923e+12, 4.461073e+12, 
4.508739e+12, 4.512933e+12, 4.565041e+12, 4.684363e+12, 4.655663e+12, 
4.644451e+12, 4.670235e+12, 4.706318e+12, 4.728195e+12, 4.768158e+12, 
4.758307e+12, 4.750263e+12, 4.792133e+12, 4.811015e+12, 4.875496e+12, 
4.981449e+12, 4.923614e+12, 4.951523e+12, 5.006352e+12, 5.052347e+12, 
5.109432e+12, 5.130101e+12, 5.124234e+12, 5.125966e+12, 5.136978e+12, 
5.157878e+12, 5.206044e+12, 5.297999e+12, 5.271712e+12, 5.273548e+12, 
5.310219e+12, 5.344467e+12, 5.377365e+12, 5.408012e+12, 5.42844e+12, 
5.397916e+12, 5.451083e+12, 5.490285e+12, 5.528865e+12, 5.632265e+12, 
5.637298e+12, 5.643364e+12, 5.680387e+12, 5.738282e+12, 5.778327e+12, 
5.858475e+12, 5.896526e+12, 5.859423e+12, 5.939643e+12, 5.976941e+12, 
6.002366e+12, 6.168737e+12, 6.134008e+12, 6.157331e+12, 6.212517e+12, 
6.316677e+12, 6.321177e+12, 6.386776e+12, 6.382249e+12, 6.360016e+12, 
6.461105e+12, 6.472185e+12, 6.535927e+12, 6.743791e+12, 6704078690000, 
6707663590000, 6830308980000, 6875257540000, 6928872610000, 7023576910000, 
7063718310000, 7044759300000, 7140136020000, 7229789160000, 7288789240000, 
7436873890000, 7449456190000, 7471674820000, 7544870830000, 7625570920000, 
7688719570000, 7734626560000, 7750323860000, 7759475670000, 7839898820000, 
7.972122e+12, 8018985080000, 8103056980000, 8101892210000, 8093799240000, 
8094023230000, 8164981320000, 8157431590000, 8186152570000, 8170120430000, 
8152961550000, 8153645390000, 8178413500000, 8169984240000, 8275090590000, 
8234925070000, 8210916120000, 8209451530000, 8268951740000, 8301215080000, 
8333155330000, 8337672910000, 8342473540000, 8344372870000, 8378476210000, 
8388300570000, 8472295450000, 8435754600000, 8415889110000, 8441078810000, 
8482013950000, 8488118150000, 8517982800000, 8522260990000, 8530699180000, 
8568031090000, 8555869480000, 8565193560000, 8.670606e+12, 8.64011e+12, 
8.648411e+12, 8.718042e+12, 8.721253e+12, 8.752512e+12, 8.810355e+12, 
8.833836e+12, 8.82621e+12, 8.866345e+12, 8.928497e+12, 8.955965e+12, 
9.044639e+12, 9.017783e+12, 9.052631e+12, 9.081338e+12, 9.103737e+12, 
9.1284e+12, 9.129744e+12, 9.157419e+12, 9.185109e+12, 9.179608e+12, 
9.218195e+12, 9.236345e+12, 9.212147e+12, 9.24422e+12, 9.272606e+12, 
9.27787e+12, 9.289816e+12, 9.328806e+12, 9.355707e+12, 9.393273e+12, 
9.44385e+12, 9.475081e+12, 9.497903e+12, 9.569281e+12, 9.668681e+12, 
9.749062e+12, 9.764289e+12, 9.810907e+12, 9.859662e+12, 9.914221e+12, 
9.946958e+12, 1.0011211e+13, 1.0037605e+13, 1.0068328e+13, 1.0124772e+13, 
1.01861e+13, 1.0215459e+13, 1.0274065e+13, 1.0312438e+13, 1.0348009e+13, 
1.0376779e+13, 1.0416638e+13, 1.0457644e+13, 1.0512054e+13, 1.0547979e+13, 
1.0573312e+13, 1.0590298e+13, 1.0667463e+13, 1.0686288e+13, 1.0744692e+13, 
1.079786e+13, 1.0876141e+13), EA19CPALTT01GYM = c(2.2, 2, 1.7, 
1.5, 1.5, 1.5, 1.6, 1.8, 1.7, 1.6, 1.8, 1.6, 1.2, 1.2, 1.2, 1.5, 
1.5, 1.5, 1.4, 1.3, 1.1, 1, 0.9, 0.8, 0.9, 0.8, 1, 1.1, 1, 0.9, 
1.1, 1.2, 1.3, 1.4, 1.5, 1.8, 1.9, 2, 2.1, 1.8, 1.9, 2.2, 2.2, 
2.1, 2.5, 2.5, 2.5, 2.6, 2.1, 2.1, 2.3, 2.8, 3.1, 2.9, 2.6, 2.4, 
2.3, 2.3, 2, 2.1, 2.6, 2.5, 2.5, 2.4, 2.1, 1.9, 2, 2.2, 2.1, 
2.3, 2.3, 2.3, 2.2, 2.4, 2.4, 2.1, 1.9, 2, 2, 2.1, 2.2, 2.1, 
2.2, 2, 1.8, 1.7, 1.7, 2.1, 2.5, 2.4, 2.3, 2.4, 2.2, 2.4, 2.3, 
2.4, 1.9, 2.1, 2.2, 2.1, 2, 2, 2.1, 2.2, 2.6, 2.5, 2.3, 2.3, 
2.5, 2.4, 2.2, 2.5, 2.5, 2.5, 2.5, 2.3, 1.8, 1.6, 1.9, 1.9, 1.9, 
1.9, 2, 1.9, 1.9, 1.9, 1.8, 1.8, 2.2, 2.6, 3.1, 3.1, 3.3, 3.3, 
3.7, 3.3, 3.7, 4, 4.1, 3.9, 3.7, 3.2, 2.2, 1.7, 1.2, 1.2, 0.6, 
0.6, 0.1, -0.1, -0.6, -0.1, -0.3, -0.1, 0.5, 0.9, 0.9, 0.8, 1.6, 
1.6, 1.7, 1.5, 1.7, 1.6, 1.9, 1.9, 1.9, 2.2, 2.3, 2.4, 2.7, 2.8, 
2.7, 2.7, 2.6, 2.6, 3, 3, 3, 2.8, 2.7, 2.7, 2.7, 2.6, 2.4, 2.4, 
2.4, 2.6, 2.6, 2.5, 2.2, 2.2, 2, 1.9, 1.7, 1.2, 1.4, 1.6, 1.6, 
1.3, 1.1, 0.7, 0.9, 0.8, 0.8, 0.7, 0.5, 0.7, 0.5, 0.5, 0.4, 0.4, 
0.3, 0.4, 0.3, -0.2, -0.6, -0.3, -0.1, 0.2, 0.6, 0.5, 0.5, 0.4, 
0.2, 0.4, 0.1, 0.3, 0.3, -0.1, 0, -0.3, -0.1, 0, 0.2, 0.2, 0.4, 
0.5, 0.6, 1.1, 1.7, 2, 1.5)), row.names = 205:447, class = "data.frame")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM