我有以下问题,这似乎很常见,但并非如此。我制作了一个具有线型和颜色的ggplot图表,它是手动设置的,两个图例的名称和变量标签相同,长格式为df 。产生一个图例,但每个变量显示两次。为了让您理解我想要实现的目标,我需要做一些备份。
我正在开发一个功能,该功能允许我用今年的每月支出更新数据框,然后生成不同的图以跟进预算。可以这么说,我的变量有两个“属性”。它们是特定项目,每个项目都是预测(即计划的)或实际支出。我本来想要的是让每个项目都具有一种颜色和两种线型(实线表示投影,实线表示实际支出)。因此,例如,绿色表示节省,实线表示预计节省,虚线表示实际节省。我想要两个图例,一个图例仅显示颜色(即项目),另一个图例仅显示两种线型(实线,虚线),以便读者将两者放在一起(这样也就少了)图例项)。如果有人可以解决这个问题,我将很高兴找到答案。但是,以下是我现在要解决的问题:
我现在已经放弃了这个最初的意图,并选择了一个图例,每种类型的行都获得了一个图例条目。这就是上面的介绍。尽管具有相同的图例名称和变量标签以及正确的编号,但每个变量现在出现两次。我想知道为什么我会收到这些重复条目并找到解决方案。我已经尝试了许多小时,尝试了各种各样的方法,但没有人遇到类似的问题(因为我的关键字搜索出现了更多“正常”问题)。
我还注意到一个奇怪的事情是变量“ Add。income”的行为不像其他变量,因为它只出现一次。
在数据帧中(下面)有许多NA值的原因是因为这些数字要填充到df中,然后随着年份的进行绘制。
代码:
ggplot(fin2019Long, aes(x=month, y=value, colour=variable)) + geom_line(aes(linetype=variable)) + geom_point() +
labs(title = "Projected expenditure and saving", y = "Euros", x = "Month") +
scale_x_continuous("Month", breaks= c(1:12)) +
scale_colour_manual(name = "Items",
values=c("green","green", "yellow", "yellow", "blue", "blue", "red", "red", "orange"),
labels=c(rep("Living expend.", 2), rep("Debt repay.", 2), rep("Saving", 2), rep("Furn. fund", 2), "Extra pay")) +
scale_linetype_manual(name = "Items",
values=c(rep(c("solid", "twodash"), 4), "twodash"),
labels=c(rep("Living expend.", 2), rep("Debt repay.", 2), rep("Saving", 2), rep("Furn. fund", 2), "Extra pay"))
数据:
structure(list(month = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L,
10L, 11L, 12L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L,
12L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 1L, 2L,
3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 1L, 2L, 3L, 4L, 5L,
6L, 7L, 8L, 9L, 10L, 11L, 12L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L,
9L, 10L, 11L, 12L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L,
12L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 1L, 2L,
3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L), variable = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L,
6L, 6L, 6L, 6L, 6L, 6L, 6L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L,
7L, 7L, 7L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 9L,
9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L), .Label = c("livingExpProj",
"livingExp", "debtRepayProj", "debtRepay", "savingProj", "saving",
"furnFundProj", "furnFund", "addIncome"), class = "factor"),
value = c(1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000,
1000, 1000, 1000, 1000, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, 600, 600, 600, 600, 600, 600, 600, 600, 600,
600, 600, 600, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500,
500, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 100,
100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 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, -108L
), class = "data.frame")
答案 0 :(得分:1)
将variable
列分成两列将使其更易于控制:
fin2019Long$type <- ifelse(grepl('Proj$', fin2019Long$variable), 'Planned', 'Spending')
fin2019Long$variable2 <- gsub('Proj$', '', fin2019Long$variable)
ggplot(fin2019Long, aes(x=month, y=value, colour=variable2)) +
geom_line(aes(linetype=type)) + geom_point() +
labs(title = "Projected expenditure and saving", y = "Euros", x = "Month") +
scale_x_continuous("Month", breaks= c(1:12))