ggh4x::stat_difference() 具有渐变颜色

问题描述 投票:0回答:1

基本上,我想要做的是使 'cumsumpcp' 和 'cummeanpcp' 之间的颜色逐渐变化,而不是固定,因为它们是由

stat_difference()
函数默认绘制的。我希望当 'cumsumpcp' > 'cummeanpcp' 时,颜色为蓝色,并且它是渐变的,具体取决于 'cumsumpcp' 和 'cummeanpcp' 之间的差异(差异越大,蓝色越深。差异越小,颜色越浅)蓝色)。当“cumsumpcp”时也一样< 'cummeanpcp' but with red color

我想要的一个例子

迄今为止我最好的尝试是:

ggplot(data = clim_pcp, aes(x = fecha, y = cumsumpcp)) + 
  geom_line() +
  geom_line(aes(y = cummeanpcp)) +
  ggh4x::stat_difference(aes(ymin = cummeanpcp, ymax = cumsumpcp))

我也尝试过

geom_ribbon
但没有运气

这是我的数据。预先感谢:

structure(list(fecha = structure(c(19358, 19359, 19360, 19361, 
19362, 19363, 19364, 19365, 19366, 19367, 19368, 19369, 19370, 
19371, 19372, 19373, 19374, 19375, 19376, 19377, 19378, 19379, 
19380, 19381, 19382, 19383, 19384, 19385, 19386, 19387, 19388, 
19389, 19390, 19391, 19392, 19393, 19394, 19395, 19396, 19397, 
19398, 19399, 19400, 19401, 19402, 19403, 19404, 19405, 19406, 
19407, 19408, 19409, 19410, 19411, 19412, 19413, 19414, 19415, 
19416, NA, 19417, 19418, 19419, 19420, 19421, 19422, 19423, 19424, 
19425, 19426, 19427, 19428, 19429, 19430, 19431, 19432, 19433, 
19434, 19435, 19436, 19437, 19438, 19439, 19440, 19441, 19442, 
19443, 19444, 19445, 19446, 19447, 19448, 19449, 19450, 19451, 
19452, 19453, 19454, 19455, 19456, 19457, 19458, 19459, 19460, 
19461, 19462, 19463, 19464, 19465, 19466, 19467, 19468, 19469, 
19470, 19471, 19472, 19473, 19474, 19475, 19476, 19477, 19478, 
19479, 19480, 19481, 19482, 19483, 19484, 19485, 19486, 19487, 
19488, 19489, 19490, 19491, 19492, 19493, 19494, 19495, 19496, 
19497, 19498, 19499, 19500, 19501, 19502, 19503, 19504, 19505, 
19506, 19507, 19508, 19509, 19510, 19511, 19512, 19513, 19514, 
19515, 19516, 19517, 19518, 19519, 19520, 19521, 19522, 19523, 
19524, 19525, 19526, 19527, 19528, 19529, 19530, 19531, 19532, 
19533, 19534, 19535, 19536, 19537, 19538, 19539, 19540, 19541, 
19542, 19543, 19544, 19545, 19546, 19547, 19548, 19549, 19550, 
19551, 19552, 19553, 19554, 19555, 19556, 19557, 19558, 19559, 
19560, 19561, 19562, 19563, 19564, 19565, 19566, 19567, 19568, 
19569, 19570, 19571, 19572, 19573, 19574, 19575, 19576, 19577, 
19578, 19579, 19580, 19581, 19582, 19583, 19584, 19585, 19586, 
19587, 19588, 19589, 19590, 19591, 19592, 19593, 19594, 19595, 
19596, 19597, 19598, 19599, 19600, 19601, 19602, 19603, 19604, 
19605, 19606, 19607, 19608, 19609, 19610, 19611, 19612, 19613, 
19614, 19615, 19616, 19617, 19618, 19619, 19620, 19621, 19622, 
19623, 19624, 19625, 19626, 19627, 19628, 19629, 19630, 19631, 
19632, 19633, 19634, 19635, 19636, 19637, 19638, 19639, 19640, 
19641, 19642, 19643, 19644, 19645, 19646, 19647, 19648, 19649, 
19650, 19651, 19652, 19653, 19654, 19655, 19656, 19657, 19658, 
19659, 19660, 19661, 19662, 19663, 19664, 19665, 19666, 19667, 
19668, 19669, 19670, 19671, 19672, 19673, 19674, 19675, 19676, 
19677, 19678, 19679, 19680, 19681, 19682, 19683, 19684, 19685, 
19686, 19687, 19688, 19689, 19690, 19691, 19692, 19693, 19694, 
19695, 19696, 19697, 19698, 19699, 19700, 19701, 19702, 19703, 
19704, 19705, 19706, 19707, 19708, 19709, 19710, 19711, 19712, 
19713, 19714, 19715, 19716, 19717, 19718, 19719, 19720, 19721, 
19722), class = "Date"), cumsumpcp = c(0.1, 0.1, 0.1, 0.1, 0.1, 
0.1, 6.4, 10.6, 10.6, 10.6, 10.7, 10.7, 10.7, 10.7, 10.7, 11.1, 
11.3, 11.3, 11.6, 11.6, 11.6, 11.6, 11.6, 11.6, 11.7, 11.7, 11.7, 
11.7, 11.7, 11.7, 11.7, 11.7, 11.7, 11.7, 11.7, 11.7, 11.7, 12.8, 
12.8, 12.8, 12.8, 12.8, 12.8, 12.8, 12.8, 12.8, 12.8, 12.8, 12.8, 
12.8, 12.8, 12.8, 12.8, 12.8, 12.8, 13.2, 13.3, 13.3, 13.3, NA, 
13.3, 13.3, 13.3, 13.3, 17.5, 18, 19.8, 34.1, 35.2, 35.3, 35.3, 
35.3, 35.3, 35.3, 35.3, 35.3, 35.3, 35.3, 35.3, 35.3, 35.3, 35.3, 
35.3, 35.3, 35.3, 35.3, 35.3, 35.3, 35.3, 35.3, 35.3, 35.3, 35.3, 
35.3, 35.3, 35.3, 35.3, 35.3, 35.3, 35.3, 35.3, 35.3, 35.3, 35.3, 
35.3, 35.3, 35.3, 35.3, 35.3, 35.3, 35.3, 42.6, 43.1, 43.1, 43.1, 
43.1, 43.1, 43.1, 43.1, 43.6, 43.6, 43.6, 43.6, 43.6, 43.6, 43.6, 
43.6, 43.6, 43.6, 43.6, 43.6, 43.6, 43.6, 43.6, 45.1, 45.1, 45.1, 
45.1, 45.1, 45.1, 45.1, 46, 46.7, 51.5, 51.5, 70.3, 76.6, 87, 
94.4, 101.6, 102.2, 102.2, 110.5, 111.5, 111.7, 111.7, 116.2, 
119.1, 128.9, 132.2, 132.2, 132.2, 132.2, 134, 134.1, 134.1, 
134.1, 134.1, 134.1, 136.7, 137.2, 137.2, 144.7, 144.7, 144.7, 
144.7, 144.7, 144.7, 144.7, 144.7, 144.7, 144.7, 144.7, 144.7, 
144.7, 144.7, 144.7, 144.7, 144.7, 144.7, 144.7, 144.7, 144.7, 
144.7, 144.7, 144.7, 144.7, 144.7, 144.7, 144.7, 144.7, 144.7, 
144.7, 144.7, 144.7, 144.7, 144.7, 144.7, 144.7, 144.7, 144.7, 
144.7, 144.7, 144.7, 144.7, 144.7, 144.7, 144.7, 144.7, 144.7, 
144.7, 144.7, 144.7, 144.7, 144.7, 144.7, 144.7, 144.7, 144.7, 
144.7, 144.7, 144.7, 144.7, 144.7, 144.7, 144.7, 144.7, 144.7, 
144.7, 144.7, 144.7, 144.7, 144.7, 144.7, 144.7, 175.9, 242.4, 
251.5, 257.7, 257.7, 257.7, 260.5, 264.1, 271.7, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), cummeanpcp = c(1.1, 
2.7, 4.2, 5.3, 7, 9, 10.6, 12.4, 13.3, 14.3, 15.2, 16, 17.1, 
17.4, 18.2, 18.9, 19.5, 20.8, 22, 22.4, 23.5, 24.6, 25.7, 26, 
26.5, 27.9, 28.6, 29.4, 30.2, 30.8, 31.9, 33.5, 35.1, 36.1, 37.3, 
38.4, 39.6, 40.6, 41.6, 42.5, 43.1, 44.5, 46.3, 46.5, 47, 48, 
49.9, 50.3, 52.3, 53.4, 54.1, 55.1, 56.6, 57.4, 58.3, 60.7, 61.5, 
62.8, 64.3, 64.3, 65.6, 66.5, 67.5, 69.4, 71.1, 72.4, 73.5, 74.1, 
74.7, 75.6, 76.9, 77.8, 78.9, 80.4, 81.4, 81.8, 82.8, 84, 84.5, 
85.8, 86.8, 88, 89.8, 90.5, 91, 92.4, 93.2, 94.1, 96.4, 97.9, 
99.4, 100.6, 102.6, 104.7, 106, 107.5, 109.2, 110.5, 111.4, 112.6, 
113.9, 114.7, 116, 117.2, 119.2, 122.1, 123, 125.3, 126.8, 129.6, 
130.9, 132.1, 133.6, 134.8, 136.1, 137.5, 139.3, 140.7, 143.2, 
144.7, 145.4, 146.8, 148.3, 149.5, 150.5, 151.4, 152.7, 155.3, 
157.7, 158.9, 161.9, 163.5, 164.9, 166.5, 167.8, 169.5, 170.2, 
171.9, 172.5, 173.7, 174.5, 175.7, 178.2, 179.8, 184.3, 185.8, 
186.9, 187.9, 188.9, 190.1, 190.7, 192.7, 193.7, 193.9, 194.2, 
195.5, 197.2, 198.2, 198.7, 200.4, 201.8, 202.2, 203.2, 203.6, 
204.2, 205, 205.8, 207, 207.3, 207.5, 207.8, 207.9, 208, 208.4, 
209.3, 210.1, 210.7, 210.9, 210.9, 210.9, 211, 211.8, 211.9, 
212.4, 213, 213, 213.4, 214.4, 215.1, 215.4, 215.4, 215.9, 216.1, 
216.3, 216.3, 216.3, 216.6, 217.4, 217.4, 217.5, 217.5, 217.9, 
219, 219.2, 219.5, 219.5, 219.5, 219.9, 220.3, 220.6, 221, 221.1, 
221.1, 221.3, 221.3, 221.8, 221.8, 222.3, 222.3, 222.4, 222.5, 
223.3, 223.4, 224.3, 224.6, 224.6, 224.6, 225.2, 225.2, 226.3, 
226.5, 227.1, 227.2, 227.9, 228, 228, 228.3, 228.6, 229.6, 230, 
230.9, 230.9, 231.3, 231.4, 231.7, 231.7, 231.8, 231.9, 232.3, 
232.4, 232.7, 233.9, 235.3, 235.5, 236.1, 236.1, 236.7, 237.3, 
237.4, 238.5, 239.5, 241.2, 241.9, 242.4, 244.8, 245.4, 245.9, 
247.1, 248.4, 249, 250.1, 253.3, 254.2, 255.6, 256.7, 258.5, 
259, 259.7, 260.6, 260.7, 261.6, 263.3, 267.6, 269.7, 273.5, 
276, 277.3, 278.2, 278.7, 281.3, 283.8, 288, 291.4, 294.8, 296.8, 
301, 302.7, 304.2, 307.9, 309.6, 313.4, 315.1, 316.1, 318.8, 
319.8, 320.6, 322.9, 327.2, 331.3, 334.2, 335.5, 337.6, 339.8, 
340.4, 341.9, 344, 345.6, 348.1, 350.1, 351.8, 352.9, 353.7, 
354.5, 356.4, 358.6, 359.9, 362.6, 363.4, 364.6, 366.1, 367.3, 
368.3, 369.4, 370.7, 371.7, 373.5, 374.2, 374.8, 376.1, 377.5, 
378.9, 381.2, 381.9, 383.5, 384.4, 384.8, 385.8, 387.6, 388.5, 
389.5, 390.2, 391.3, 392.4, 394.5, 395.9, 397.5, 400, 401.9, 
403.3, 404.6, 405.6, 406.4, 407.4, 409.4, 411.1, 413.2), diffmean = c(-1, 
-2.6, -4.1, -5.2, -6.9, -8.9, -4.2, -1.8, -2.7, -3.7, -4.5, -5.3, 
-6.4, -6.7, -7.5, -7.8, -8.2, -9.5, -10.4, -10.8, -11.9, -13, 
-14.1, -14.4, -14.8, -16.2, -16.9, -17.7, -18.5, -19.1, -20.2, 
-21.8, -23.4, -24.4, -25.6, -26.7, -27.9, -27.8, -28.8, -29.7, 
-30.3, -31.7, -33.5, -33.7, -34.2, -35.2, -37.1, -37.5, -39.5, 
-40.6, -41.3, -42.3, -43.8, -44.6, -45.5, -47.5, -48.2, -49.5, 
-51, NA, -52.3, -53.2, -54.2, -56.1, -53.6, -54.4, -53.7, -40, 
-39.5, -40.3, -41.6, -42.5, -43.6, -45.1, -46.1, -46.5, -47.5, 
-48.7, -49.2, -50.5, -51.5, -52.7, -54.5, -55.2, -55.7, -57.1, 
-57.9, -58.8, -61.1, -62.6, -64.1, -65.3, -67.3, -69.4, -70.7, 
-72.2, -73.9, -75.2, -76.1, -77.3, -78.6, -79.4, -80.7, -81.9, 
-83.9, -86.8, -87.7, -90, -91.5, -94.3, -95.6, -89.5, -90.5, 
-91.7, -93, -94.4, -96.2, -97.6, -100.1, -101.1, -101.8, -103.2, 
-104.7, -105.9, -106.9, -107.8, -109.1, -111.7, -114.1, -115.3, 
-118.3, -119.9, -121.3, -122.9, -122.7, -124.4, -125.1, -126.8, 
-127.4, -128.6, -129.4, -129.7, -131.5, -128.3, -132.8, -115.5, 
-110.3, -100.9, -94.5, -88.5, -88.5, -90.5, -83.2, -82.4, -82.5, 
-83.8, -81, -79.1, -69.8, -68.2, -69.6, -70, -71, -69.6, -70.1, 
-70.9, -71.7, -72.9, -73.2, -70.8, -70.6, -70.7, -63.3, -63.7, 
-64.6, -65.4, -66, -66.2, -66.2, -66.2, -66.3, -67.1, -67.2, 
-67.7, -68.3, -68.3, -68.7, -69.7, -70.4, -70.7, -70.7, -71.2, 
-71.4, -71.6, -71.6, -71.6, -71.9, -72.7, -72.7, -72.8, -72.8, 
-73.2, -74.3, -74.5, -74.8, -74.8, -74.8, -75.2, -75.6, -75.9, 
-76.3, -76.4, -76.4, -76.6, -76.6, -77.1, -77.1, -77.6, -77.6, 
-77.7, -77.8, -78.6, -78.7, -79.6, -79.9, -79.9, -79.9, -80.5, 
-80.5, -81.6, -81.8, -82.4, -82.5, -83.2, -83.3, -83.3, -83.6, 
-83.9, -84.9, -85.3, -86.2, -86.2, -86.6, -86.7, -87, -55.8, 
10.6, 19.6, 25.4, 25.3, 25, 26.6, 28.8, 36.2, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA)), row.names = c(NA, 
-366L), class = c("tbl_df", "tbl", "data.frame"))
r ggplot2 gradient geom-ribbon ggh4x
1个回答
0
投票

您可以在两条线之间绘制一堆垂直线段,并用

scale_color_gradientn
映射到两条线之间的差异:

ggplot(data = clim_pcp, aes(x = fecha, y = cumsumpcp)) + 
  geom_line() +
  geom_line(aes(y = cummeanpcp)) +
  geom_segment(aes(xend = fecha, yend = cummeanpcp,
                   color = cumsumpcp - cummeanpcp), linewidth = 1) +
  scale_color_gradientn(limits = c(-150, 150),
                        colors = c("blue", "gray", "red"))

© www.soinside.com 2019 - 2024. All rights reserved.