我有一个linetype
折线图,由三个数据框组成,我控制了颜色方案。我改为使用tpAct <- data.frame(
Date=seq.Date(as.Date('2017-09-01'), as.Date('2018-01-01'),by='month'),
Reg1=rnorm(5, 10, 5),
Reg2=rnorm(5, 15, 5),
Reg3=rnorm(5, 20, 5),
Reg4=rnorm(5, 25, 5),
Reg5=rnorm(5, 30, 5),
Total=rnorm(5, 60, 5)
)
tpOL <- data.frame(
Date=seq.Date(as.Date('2017-09-01'), as.Date('2018-01-01'),by='month'),
Reg1=rnorm(5, 10, 5),
Reg2=rnorm(5, 25, 5),
Reg3=rnorm(5, 20, 5),
Reg4=rnorm(5, 25, 5),
Reg5=rnorm(5, 30, 5),
Total=rnorm(5, 60, 5)
)
tpModL2 <- data.frame(
Date=seq.Date(as.Date('2017-09-01'), as.Date('2018-01-01'),by='month'),
Reg1=rnorm(5, 10, 5),
Reg2=rnorm(5, 25, 5),
Reg3=rnorm(5, 20, 5),
Reg4=rnorm(5, 25, 5),
Reg5=rnorm(5, 30, 5),
Total=rnorm(5, 60, 5)
)
ggplot() +
geom_line(data=tpAct, aes(x=Date, y=Reg1), color='red', size=1.25) +
geom_line(data=tpAct, aes(x=Date, y=Reg2), color='blue', size=1.25) +
geom_line(data=tpAct, aes(x=Date, y=Reg3), color='green', size=1.25) +
geom_line(data=tpAct, aes(x=Date, y=Reg4), color='pink', size=1.25) +
geom_line(data=tpAct, aes(x=Date, y=Reg5), color='yellow', size=1.25) +
geom_line(data=tpAct, aes(x=Date, y=Total), color='black', size=1.25) +
geom_line(data=tpOL, aes(x=Date, y=Reg1), linetype=5, color='red', size=1.25) +
geom_line(data=tpOL, aes(x=Date, y=Reg2), linetype=5, color='blue', size=1.25) +
geom_line(data=tpOL, aes(x=Date, y=Reg3), linetype=5, color='green', size=1.25) +
geom_line(data=tpOL, aes(x=Date, y=Reg4), linetype=5, color='pink', size=1.25) +
geom_line(data=tpOL, aes(x=Date, y=Reg5), linetype=5, color='yellow', size=1.25) +
geom_line(data=tpOL, aes(x=Date, y=Total), linetype=5, color='black', size=1.25) +
geom_line(data=tpModL2, aes(x=Date, y=Reg1), linetype=4, color='red', size=1.25) +
geom_line(data=tpModL2, aes(x=Date, y=Reg2), linetype=4, color='blue', size=1.25) +
geom_line(data=tpModL2, aes(x=Date, y=Reg3), linetype=4, color='green', size=1.25) +
geom_line(data=tpModL2, aes(x=Date, y=Reg4), linetype=4, color='pink', size=1.25) +
geom_line(data=tpModL2, aes(x=Date, y=Reg5), linetype=4, color='yellow', size=1.25) +
geom_line(data=tpModL2, aes(x=Date, y=Total), linetype=4, color='black', size=1.25) +
labs(x='', y='Total Balances ($B)')
来区分线条。这导致不自动生成图例的情况。如何为此剧情创建传奇?
.archive .entry-footer {
display: none;
}
答案 0 :(得分:3)
以下是使用您提供的示例数据框堆叠和绘制数据的方法:
library(tidyverse)
setNames(list(tpAct, tpOL, tpModL2), c("tpAct","tpOL","tpModL2")) %>%
map_df(~ .x %>% gather(key, value, -Date), .id="source") %>%
ggplot(aes(Date, value, colour=key, linetype=source)) +
geom_line() +
scale_colour_manual(values=c('red','blue','green','pink', 'yellow', 'black')) +
theme_classic()
setNames(list(tpAct, tpOL, tpModL2), c("tpAct","tpOL","tpModL2"))
将三个数据框放在一个列表中,并将数据框名称指定为列表元素的名称。
map_df(~ .x %>% gather(key, value, -Date), .id="source")
将各个数据帧转换为长格式,并将它们堆叠成一个长格式数据帧。
这是情节的样子:
分面图可能更容易阅读:
setNames(list(tpAct, tpOL, tpModL2), c("tpAct","tpOL","tpModL2")) %>%
map_df(~ .x %>% gather(key, value, -Date), .id="source") %>%
ggplot(aes(Date, value, colour=key)) +
geom_line() +
scale_colour_manual(values=c('red','blue','green','pink', 'yellow', 'black')) +
theme_classic() +
facet_grid(~ source)
答案 1 :(得分:1)
当您发现自己想要使用ggplot2
手动添加图例时,我发现它通常意味着您要以不同于ggplot2
的方式制作您的情节意。
要让ggplot
为此地图生成图例,您需要先将数据重新整形为长格式,然后再将其转发给ggplot
。
您希望将所有三个数据集(tpAct(),tpOL(),tpModL2() - 我假设这些是返回数据帧的函数组合成一个数据集。 - 让我们称之为合并数据。然后列将是:dataset(表示观察来自哪个集合),Date,RegType(Reg1,Reg2,.. Total)和Value(您正在绘制的实际y值)。
然后你可以使用以下内容创建一个情节:
ggplot(combineddata, aes(x=Date, y=Value, color=RegType, linetype=dataset) +
geom_line()
这将为上面的回归和数据集的每个组合绘制一行,但会自动执行此操作并创建图例。如果您不喜欢ggplot
为您选择的颜色和线型,您可以进一步指定要用于比例的特定颜色和线型:
ggplot(combineddata, aes(x=Date, y=Value, color=RegType, linetype=dataset) +
geom_line() +
scale_color_manual(values = c("red", "blue", "green", "pink", "yellow", "black")) +
scale_linetype_manual(values = c(1, 5, 4)
您可能需要明确制作RegType
和dataset
有序因素,然后才能将数据发送到ggplot
以使其按正确顺序排列,或者更改颜色和线型的顺序上方。