我有两个数据集,想将它们组合成一个图表,一个是条形图(2个组),一个是点线图(1个组)。我已经将这些图表组合起来,并显示了条形图的图例,但每当我尝试为点/线显示图例时,就失败了。
以下是我的数据集摘录:
这是我得到的图表: 正如您所见,点/线组在图例中未显示。然后我尝试删除参数scale_color_manual(),并调整geom_point()和geom_line()参数,如下所示:
我得到的图表是: 我使用melt()函数合并两个数据集后得到了同样的图形。
我还尝试将其分成3组,不显示点/线组。这样可以显示所有3个组,但不幸的是,点/线组现在被标记为一个正方形而不是它的点/线符号(在图例中)。 有没有人知道我如何调整我的代码,以便将点/线组显示为单个圆点,位于其他两个组旁边或下方?最好还能选择标签名称(“总成本”)。
非常感谢您的帮助!
以下是我的数据集摘录:
bargroup <- data.frame('Year' = as.numeric(rep(2001:2004, each = 2)),
'Group' = as.factor(rep(c('State', 'Country'), 4)),
'Share' = as.numeric(c(0.42, 0.41, 0.4, 0.4, 0.42, 0.4, 0.42, 0.38)))
plgroup <- data.frame('Year' = as.numeric(2001:2004),
'Group' = as.factor(rep('State', 4)),
'Value' = as.numeric(c(4.95, 5.31, 5.29, 4.96)))
这是我的当前代码:
ggplot() +
geom_bar(data = bargroup, aes(x = Year, y = Share, fill = Group, group = Group),
stat = 'identity', position = position_dodge2(preserve = 'single')) +
geom_point(data = plgroup, aes(y = Value*0.1, x = Year), size = 4, color = '#875DA3') +
geom_line(data = plgroup, aes(y = Value*0.1, x = Year), size = 1, color = '#875DA3') +
labs(x = 'Year') +
scale_y_continuous(name = 'Share groups', labels = scales::percent,
sec.axis = sec_axis(~.*10, name = 'Cost')) +
scale_fill_manual(labels = c('Share State', 'Share Country'),
values = c('#659B7A', '#8CD7F0')) +
scale_color_manual(labels = c('Total Cost'),
values = c('#875DA3')) +
theme_minimal() +
theme(legend.title = element_blank(),
legend.position = 'bottom',
plot.title = element_blank(),
panel.grid.minor = element_blank(),
axis.title.x = element_text(size = 18),
axis.title.y = element_text(size = 18),
axis.text = element_text(size = 16),
legend.text = element_text(size = 18)) +
guides(fill = guide_legend(nrow = 2, byrow = T))
dev.off()
这是我得到的图表: 正如您所见,点/线组在图例中未显示。然后我尝试删除参数scale_color_manual(),并调整geom_point()和geom_line()参数,如下所示:
geom_point(data = plgroup, aes(y = Value*0.1, x = Year, color = Group),
size = 4, color = '#875DA3', show.legend = T)
geom_line(data = plgroup, aes(y = Value*0.1, x = Year, color = Group),
size = 1, color = '#875DA3', show.legend = T)
我得到的图表是: 我使用melt()函数合并两个数据集后得到了同样的图形。
我还尝试将其分成3组,不显示点/线组。这样可以显示所有3个组,但不幸的是,点/线组现在被标记为一个正方形而不是它的点/线符号(在图例中)。 有没有人知道我如何调整我的代码,以便将点/线组显示为单个圆点,位于其他两个组旁边或下方?最好还能选择标签名称(“总成本”)。
非常感谢您的帮助!
guides(fill = guide_legend(nrow = 2, byrow = T, order = 1))
。 - TarJae