如果我使用ggplot
在R中构建复杂图表时可能会问一个关于正确逻辑的抽象问题[由特定示例支持]。例如,我需要创建一个这样的图表:
我脑子里的逻辑步骤如下:
首先,我使用melt()函数将数据从宽格式转换为长格式
其次,我创建了一个ggplot()脚本,将data = , aes(x=date, y=value, colour = variable, shape = variable) , size = , stat = 'identity'
添加到geom_line()
和geom_point()
。
第三,我添加scale_shape_manual
和scale_colour_manual
来自定义我的图表和图例。
虽然我很确定它会给我一个理想的图表,但我很怀疑这个传说会以我需要的方式描绘出来。特别是,对同一图表的点和线都使用scale_colour_manual将导致图例中的重复记录:对于点和线。
下面是我的一个脚本,它生成了我需要的图表以及图例的问题:
p8_ch2_points_melt包含点数据, p8_ch2_line_melt包含行的数据。
p8.2_rest <- ggplot() +
geom_point(data = p8_ch2_points_melt, aes(x=date, y=value, colour = variable, shape= variable), size = 1, stat = 'identity') +
geom_line (data = p8_ch2_line_melt, aes(x=date, y=value, colour = variable), size = 1, stat = 'identity') +
scale_shape_manual (
guide = "legend",
name = NULL,
breaks= c('eff_int', 'int'),
labels= c('Эффективная ставка, % годовых (левая ось)', 'Стоимость суверенных займов, % годовых (левая ось)'),
values = c(15,20))+
scale_colour_manual (
guide = "legend",
name = NULL,
breaks= c('eff_int', 'int', 'debt_serv'),
labels= c('Эффективная ставка, % годовых (левая ось)', 'Стоимость суверенных займов, % годовых (левая ось)', 'Обслуживание долга, % от ВВП (левая ось)'),
values = c('#4477AA', '#117733', '#332288'))
这里是它产生的图表:
以下是2个数据帧的dput():
dput(p8_ch2_points_melt)
structure(list(date = structure(c(2012, 2012.25, 2012.5, 2012.75,
2013, 2013.25, 2013.5, 2013.75, 2014, 2014.25, 2014.5, 2014.75,
2015, 2015.25, 2015.5, 2015.75, 2016, 2016.25, 2016.5, 2012,
2012.25, 2012.5, 2012.75, 2013, 2013.25, 2013.5, 2013.75, 2014,
2014.25, 2014.5, 2014.75, 2015, 2015.25, 2015.5, 2015.75, 2016,
2016.25, 2016.5), class = "yearqtr"), variable = structure(c(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), .Label = c("eff_int", "int"), class = "factor"),
value = c(6.96419821086019, 7.14380786734124, 7.62285510953761,
8.38643647420047, 9.3298074353733, 9.39536175697088, 9.25562759246473,
9.01979842614537, 8.86956235820209, 8.71034537033914, 8.70483610509478,
8.86490412786529, 9.14046831486076, 9.25763491737298, 9.35166748435806,
9.61977735450941, 9.77846144170396, 9.79770969419896, 9.85126049926847,
10.7636292111401, 10.7026205049705, 9.83155682535731, 8.88716591127536,
7.27131536386736, 7.2219761501119, 9.51243063851385, 9.44429820351177,
8.41534119261688, 7.51079204000062, 6.82767573245953, 7.27469361353513,
15.2981698351549, 11.5648989165497, 9.18186633248605, 7.23361407952981,
7.09619633565995, 6.09043348368972, 5.33841979178199)), row.names = c(NA,
-38L), .Names = c("date", "variable", "value"), class = "data.frame")
dput(p8_ch2_line_melt)
structure(list(date = structure(c(2012, 2012.25, 2012.5, 2012.75,
2013, 2013.25, 2013.5, 2013.75, 2014, 2014.25, 2014.5, 2014.75,
2015, 2015.25, 2015.5, 2015.75, 2016, 2016.25, 2016.5), class = "yearqtr"),
variable = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "debt_serv", class = "factor"),
value = c(10.8960973867467, 12.607562113883, 10.7487398451497,
9.89070432209185, 10.4942585698635, 7.75787413463193, 7.79618335620887,
7.85681809145533, 8.47139147230582, 15.2587567726622, 14.4634263544327,
15.8101561314042, 14.5915615542354, 17.8477420726091, 14.0181468565348,
16.2598789624509, 14.3942661723461, 14.0541133390243, 13.434090770495
)), row.names = c(NA, -19L), .Names = c("date", "variable",
"value"), class = "data.frame")
所以,我在这个网站上有2个专家问题: 1.创建此图表时我做错了什么? 2.为了形成在ggplot中创建图表的正确逻辑,您建议阅读哪些文献?
谢谢。
答案 0 :(得分:1)
尝试给予比例相同的中断和标签然后ggplot将它们合并(32是一个空白的形状)
ggplot(p8_ch2_line_melt, aes(as.numeric(date), value, color = variable, shape = variable)) +
geom_line(size = 1) +
geom_point(data = p8_ch2_points_melt, size = 1) +
scale_shape_manual(
breaks= c('eff_int', 'int', 'debt_serv'),
name = NULL,
labels= c('Эффективная ставка, % годовых (левая ось)', 'Стоимость суверенных займов, % годовых (левая ось)', 'Обслуживание долга, % от ВВП (левая ось)'),
values = c(32, 15, 14)) +
scale_colour_manual (
breaks= c('eff_int', 'int', 'debt_serv'),
name = NULL,
labels= c('Эффективная ставка, % годовых (левая ось)', 'Стоимость суверенных займов, % годовых (левая ось)', 'Обслуживание долга, % от ВВП (левая ось)'),
values = c('#4477AA', '#117733', '#332288'))