r - 无法合并两个图例
问题描述
我已经绘制了堆叠条形图和折线图,其中有两个不同的数据集。我得到了他们两个独立的传说。我已经尝试了所有可能的事情。请找到随附的代码。
alldata = data.frame(x, aircargo, autototal, govtreceipts,
iipconsumer,nongimports, railfreight)
linedata = data.frame(x,ceii)
melteddata = melt(alldata,id.vars="x")
plotS1 <- ggplot(melteddata)
plotS1 + geom_bar(aes(x=ordered_x,y=value,factor=variable,fill=variable,
order=-as.numeric(variable)), stat="identity") +
geom_line(data=linedata, aes(x=as.numeric(ordered_x),y=ceii, color = "CEII"), lwd=1.5) +
scale_color_manual( values = c("#000000")) +
scale_fill_manual(name = "Components", values = c("#0000FF", "#FFC0CB", "#00FFFF", "#00FF00", "#FF00FF", "#20B2AA", "#000000")) +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1)) + theme(plot.background = element_rect(fill = "#BFD5E3")) +
ggtitle("Monthly Contribution by Components (3 month MA)") +
theme( panel.border = element_blank(), panel.grid.major = element_blank(), panel.grid.minor = element_blank()) + labs( y = "", x = "") +
scale_y_continuous(labels = c("-0.30","-0.25","-0.2","-0.15","-0.10","-0.05", "0.00", "0.05", "0.10", "0.15", "0.20", "0.25", "0.30"), breaks = c(-0.30, -0.25, -0.20, -0.15, -0.10, -0.05, 0.00, 0.05, 0.10, 0.15, 0.20, 0.25, 0.30))
数据集 -
aircargo <- c(-0.027, 0.028, 0.044, 0.011, 0.041, 0.030, -0.028, 0.017, 0.001, 0.060, -0.040, 0.016, 0.006, -0.040, -0.003, 0)
autototal <- c(0.061, -0.004, 0.009, 0.024, -0.026, 0.025, -0.029, 0.000, -0.015, -0.016, 0.026, -0.062, 0.034, 0.002, -0.081, -0.005)
govtreceipts <- c(-0.001, 0.001, -0.005, 0.031, -0.023, 0.000, -0.009, 0.005, 0.002, -0.005, 0.004, 0.000, 0.004, -0.003, 0, 0)
iipconsumer <- c(0.043, -0.014, 0.041, -0.035, 0.001, 0.001, 0.040, 0.010, -0.006, 0.013, 0.001, -0.006, -0.002, -0.011, -0.033, 0)
nongimports <- c(0.018, -0.008, 0.015, -0.004, 0.019, -0.010, 0.008, 0.007, -0.021, 0.006, -0.002, -0.007, 0.009, -0.017, 0.005, 0)
railfreight <- c(0.014, -0.015, 0.031, 0.103, -0.041, 0.025, -0.044, 0.061, -0.050, 0.092, -0.045, 0.011, -0.007, 0.050, 0.100, -0.015)
x <- c("Jan-18", "Feb-18", "Mar-18", "Apr-18", "May-18", "Jun-18", "Jul-18", "Aug-18", "Sep-18", "Oct-18", "Nov-18", "Dec-18", "Jan-19", "Feb-19", "Mar-19", "Apr-19")
ceii <- c(0.108, -0.012, 0.134, 0.131, -0.030, 0.072, -0.062, 0.100, -0.089, 0.149, -0.070, -0.047, 0.043, -0.019, -0.012, -0.020)
请帮助结合传说。提前致谢。
解决方案
一种选择是使这两个因素的水平相同。这需要对 data.frames 进行一些前期工作。
例如,这是执行此操作的一种方法,添加一个名为variable
to的变量linedata
,然后匹配因子水平。
melteddata = reshape2::melt(alldata, id.vars = "x")
# Add CEII to levels of "variable"
melteddata$variable = factor(melteddata$variable,
levels = c(levels(melteddata$variable), "CEII") )
linedata = data.frame(x, ceii, variable = "CEII")
# Same levels in linedata as melteddata
linedata$variable = factor(linedata$variable,
levels = levels(melteddata$variable) )
然后我为绘图之外的颜色制作了一个矢量,以便它可以用于颜色和填充。我将其设为命名向量,因为我发现这是最好的做法,以防订单发生变化。
# Vector of colors
fillcol = c("#0000FF", "#FFC0CB", "#00FFFF", "#00FF00", "#FF00FF", "#20B2AA", "#000000")
names(fillcol) = levels(melteddata$variable)
然后,如果您drop = FALSE
在比例图层中使用,您会得到一个组合图例。
要获得填充框以及您需要的行的行override.aes
框guide_legend()
。我从最后一个框中删除了填充,以便显示该行。
注意我没有你的ordered_x
变量,所以这可能不是你要找的情节。
ggplot(melteddata) +
geom_col(aes(x = x, y = value, fill = variable) ) +
geom_line(data = linedata, aes(x = x, y = ceii,
color = variable,
group = 1), lwd = 1.5) +
scale_color_manual(name = "Components", drop = FALSE,
values = fillcol ) +
scale_fill_manual(name = "Components", drop = FALSE,
values = fillcol ) +
guides(fill = guide_legend(override.aes = list(fill = c(fillcol[1:6], NA) ) ) )
推荐阅读
- django - 有没有更好的方法在 admin.py 中显示一长串条目
- java - 带有Spring Boot和多个模式的Liquibase,如何指定执行顺序
- java - 是否可以为 MySQL 数据库视图生成实体代码?
- python - 使用循环过滤熊猫数据框中的多列
- python - 如何在没有元类冲突的情况下将泛型类型与 PyQt 子类一起使用?
- c# - 实体框架不级联删除
- c# - ML.Net - 无法加载保存的模型
- vba - 检查对象的属性是否具有值
- r - R中的实现:查找两个字符列表之间的距离
- sql-server - 为什么 SQL Server 登录没有映射到任何用户,但仍然可以操作所有操作?