r - Customise the ggplot2 legend to pick up the symbology of points not lines
问题描述
I have two data frames, one gives points for drawing three lines (rAge.df
) and one for points on which the lines are based (rEU.df
).
library(ggplot2)
rAge.df<-structure(list(Age = c(35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 35, 36, 37, 38, 39, 40,
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
57, 58, 59, 60), variable = structure(c(1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("ND", "SD", "PV"), class = "factor"),
Share = c(16.4959988843349, 17.7615473921574, 19.0861268275909,
20.4679657722585, 21.9047820649977, 23.3937954133475, 24.9317508644732,
26.5149527816908, 28.139308544203, 29.8003807884421, 31.4934466656336,
33.2135623240542, 34.9556306521092, 36.7144702485073, 38.4848836191358,
40.2617227296193, 42.0399502541911, 43.8146951366457, 45.5813013960679,
47.3353694462817, 49.0727895322484, 50.7897672004883, 52.4828409994153,
54.1488928391191, 55.785151622991, 57.3891908941929, 51.6496034356313,
49.5869357858129, 47.5118978575713, 45.4315292317247, 43.3530553560567,
41.28379010844, 39.2310337902499, 37.2019694961614, 35.2035609515484,
33.2424548980957, 31.3248909394419, 29.4566214415355, 27.6428436382166,
25.8881455520378, 24.1964667405507, 22.5710742590061, 21.0145536304736,
19.5288140682987, 18.1151067312051, 16.7740544272535, 15.5056909291712,
14.3095079213272, 13.1845075612709, 12.1292586937085, 11.1419548855016,
10.2204726380993, 31.8543976800338, 32.6515168220297, 33.4019753148377,
34.1005049960168, 34.7421625789455, 35.3224144782125, 35.8372153452769,
36.2830777221478, 36.6571305042486, 36.9571643134622, 37.1816623949245,
37.3298162344103, 37.4015257096742, 37.3973841994549, 37.3186496403135,
37.1672030113746, 36.9454961153352, 36.6564907950555, 36.303591872727,
35.8905761264648, 35.4215195385805, 34.9007248781846, 34.3326514393138,
33.7218484671724, 33.0728934915074, 32.3903364677078)), row.names = c(NA,
-78L), class = "data.frame")
rEU.df<-structure(list(MeanAge = c(48.8553004476329, 50.9208553782224,
51.7996144755705, 48.3924335010784, 49.8040291699645, 51.6064465750308,
44.2004512236123, 51.7996144755705, 50.8599429036558, 51.1341844537536,
51.5841012929359, 51.0868375055975, 52.3291349501681, 44.3581834722897,
50.125224410366, 48.9944572855644, 52.8772671501634, 46.8572780025509,
49.8726702627702, 52.9016200087484, 44.5146659042334, 52.4717924092057,
43.5684603465277, 50.3229230496888, 44.3581834722897, 51.4681525424742,
48.9944572855644, 50.125224410366, 49.8726702627702, 52.7231809158358,
49.8292117687702, 52.7231809158358, 51.0868375055975, 53.3770013131387,
52.6906296509674, 48.9944572855644, 48.8553004476329, 51.6707535830708,
51.6707535830708, 52.8772671501634, 51.3083721733126, 47.0454622157873,
50.7131510488736, 50.8081225812258, 51.9550681604832, 53.006405791163,
52.4145074733917, 48.7092245644304, 54.5400300066882, 52.2009597035923,
50.4887796487131, 50.3420635400908, 55.110505120969, 48.8622481369031,
51.4728114404938, 50.3420635400908, 46.6650241052098, 50.6677435091333,
51.4728114404938, 52.4145074733917, 51.0868375055975, 46.8572780025509,
51.5404073256315, 52.3905298999787, 50.2732415529043, 41.7969648256593,
54.5400300066882, 49.8471433170061, 51.1145214426494, 52.8772671501634,
44.2004512236123, 51.2619310686016, 50.8599429036558, 47.0454622157873,
52.6748750541104, 50.7745528422084, 52.5012011864781, 46.3075987053115,
49.8040291699645, 53.006405791163, 50.4887796487131, 53.3770013131387
), variable = structure(c(3L, 1L, 1L, 3L, 3L, 1L, 2L, 2L, 3L,
2L, 1L, 2L, 1L, 1L, 2L, 1L, 2L, 3L, 2L, 1L, 2L, 1L, 2L, 3L, 2L,
1L, 2L, 1L, 3L, 1L, 3L, 2L, 3L, 2L, 3L, 3L, 2L, 1L, 3L, 3L, 1L,
2L, 2L, 2L, 1L, 1L, 3L, 3L, 3L, 1L, 3L, 3L, 3L, 2L, 2L, 1L, 1L,
2L, 1L, 2L, 1L, 2L, 2L, 3L, 1L, 1L, 1L, 3L, 3L, 1L, 1L, 2L, 1L,
3L, 1L, 3L, 1L, 2L, 1L, 2L, 2L, 3L), .Label = c("ND", "SD", "PV"
), class = "factor"), Share = c(27.625634115409, 32.2814072926139,
56.384858044164, 34.7655986509275, 38.2228587954993, 47.1566923267941,
33.1835059605237, 20.2902208201893, 31.8768659727265, 23.6260666673969,
34.8793774319066, 15.2361775316721, 51.1094443402713, 43.3937756533486,
18.8452733262605, 17.3539115669736, 23.4143178610931, 54.787770712593,
26.0606348753546, 43.0121951219512, 18.2241026646866, 48.7757255936675,
54.4961927683711, 39.7116806308526, 23.837481165896, 43.2792381233076,
12.6050884192217, 61.6003126919426, 24.895798665589, 36.2653010926418,
20.3900134327667, 12.4928115672153, 47.6885644768856, 18.6540198735321,
41.1970823798627, 70.0410000138047, 31.9584258084971, 31.1343057228244,
54.4649627548062, 27.9415690911171, 45.4125164442774, 31.0376740461905,
20.0911195757712, 28.1058295349395, 40.2115979106705, 31.6228070175439,
37.0480272557424, 25.9252026169319, 34.4557969971699, 41.6638098503028,
20.6310523953056, 36.1683017825066, 44.5089389366148, 35.5591236818947,
21.6832762379321, 42.1825341992538, 21.8815321732416, 24.6493808579052,
30.4214678708606, 19.533282045646, 37.0752579914422, 14.7469438513339,
20.5721956539978, 38.4446878422782, 43.7932453154804, 30.8756062393498,
53.8110999184535, 45.3571601296126, 42.1975168384322, 48.6441130477898,
36.8740698426061, 16.3615612873773, 45.5579762769305, 49.5034679255878,
38.9090335803248, 56.611669632979, 47.7143668370244, 22.0682432596995,
41.9495668700335, 17.1842105263158, 22.1445520425832, 28.3915192093097
)), row.names = c(178L, 60L, 75L, 174L, 190L, 4L, 134L, 158L,
225L, 166L, 61L, 98L, 30L, 32L, 151L, 82L, 99L, 218L, 89L, 53L,
159L, 3L, 156L, 179L, 115L, 70L, 165L, 68L, 172L, 25L, 175L,
108L, 181L, 164L, 194L, 248L, 95L, 58L, 224L, 182L, 23L, 84L,
85L, 90L, 37L, 55L, 243L, 223L, 207L, 33L, 212L, 229L, 200L,
155L, 103L, 63L, 54L, 154L, 20L, 160L, 15L, 135L, 162L, 183L,
47L, 5L, 41L, 209L, 211L, 16L, 51L, 101L, 59L, 167L, 67L, 240L,
48L, 119L, 24L, 138L, 129L, 247L), class = "data.frame")
When I produce the plot, the legend is not very meaningful. I would want it to pick up the symbology for the points data frame, not the lines, e.g. show squares, circle and triangles in the legend. Also, I'd like to provide the text of the legend, e.g. replace "ND" with "No Delay".
ggplot() +
geom_line(data = rAge.df, aes(x = Age, y = Share, color = variable), size = 1, linetype = "dashed") +
geom_point(data = rEU.df, aes(x = MeanAge, y = Share, color = variable),
size = 2, shape = as.numeric(rEU.df$variable) - 1) +
ylim (c(0,100)) +
scale_color_manual(values = c("black", "red", "green"))+
scale_shape_manual(values = c(0, 1, 2))
解决方案
您可以使用参数来隐藏线条图例,并使用以下参数向show.legend
图例添加自定义标签:annotations
labels
scale_color_manual
annotations <- c("annot_1", "annot_2", "annot_3")
pl <- ggplot() +
geom_line(data = rAge.df, aes(x = Age, y = Share, color = variable),
size = 1, linetype = "dashed", show.legend = FALSE) +
geom_point(data = rEU.df, aes(x = MeanAge, y = Share, color = variable,
shape = variable), size = 2) +
ylim (c(0,100)) +
scale_color_manual(values = c("black", "red", "green"),
labels = annotations) +
scale_shape_manual(values = c(0, 1, 2),
labels = annotations)
请注意,如果您想将点的形状与变量对应起来,您应该将此变量包含在aes()
函数中。这就是为什么我不得不修改geom_point()
函数的调用。
推荐阅读
- katalon - Web 中的后台脚本执行 - Katalon
- clojure - 为什么这个关键字函数查找在 hashmap 中不起作用?
- error-handling - Rust Snafu Crate: no method named `fail` found for enum `Error` in the current scope
- angular - 如何创建组合来自两个不同功能模块的数据的 NGRX 选择器?
- react-native - React 本机模式的行为不符合预期
- java - 如何保存和恢复用户看到的最后一个图像视图?
- c# - 如何使用访问 List 类型的所有行
在 C# .NET 框架中? - mysql - 使用 openpyxl(django) 将问题导出到 excel(似乎无法与 fetchall() 一起使用)
- .net - 如何让dotnet core选择低版本?
- objective-c - 使用 Core Graphics 发布音量减小/增大事件