如何在 r 中的 ggplot2 中绘制第二个图例

Bar*_*rry 4 r data-visualization ggplot2

我有两个数据集,我试图在 r 下的 ggplot2 中叠加的一张图表上显示。数据集 1 需要显示为一组条形分组(每个国家 1 组 - 数据集中有几个国家)。数据集 2 需要显示为一组横跨条形的彩色水平线。请注意,两个数据集的长度不同。我下面有一些代码说明了我正在尝试做的事情(根据其他人的建议设计)。

library(ggplot2)

chart1_data <- data.frame(year=c("1998","1998","1998","1998","1998","1998","1998","1998","1998"), medicine=c("Fent","Meth","Morph","Fent","Meth","Morph","Fent","Meth","Morph"), entity=c("Italy","Italy","Italy","Norway","Norway","Norway","Portugal","Portugal","Portugal"), usage=c(3.01,9.32,2.01,1.24,1.43,28.48,5.01,5.51,41.82))

chart1_means <- data.frame(label=c("Global Fent","EURO Fent","Global Meth","EURO meth","Global Morph","EURO Morph"), value=c(0.03, 0.07, 1.59, 5.12, 3.28, 8.54))

means_labels = chart1_means$label
colors = rainbow(length(means_labels))

ggplot(data=chart1_data, aes(x=entity, y=usage, fill=medicine)) +
geom_bar(stat="identity", position=position_dodge(), show.legend=TRUE) +
geom_hline(data=chart1_means, aes(yintercept=value), color=colors) +
scale_fill_manual("means", values=colors, guide=guide_legend(override.aes = list(colors)))
Run Code Online (Sandbox Code Playgroud)

我遇到的困难是我需要两个传奇;一种用于条形,一种用于线条。到目前为止,我的所有尝试都将每个数据集的各个部分在某种程度上混合在一起,形成了一个传奇。例如,在下面的图表中,请注意标题错误的单个图例,并且没有任何关于线条的内容。

结果图

有人对我如何实现我想要的有建议吗?任何指示表示赞赏。

Gre*_*gor 6

正如 @rawr 所建议的,映射的事物会aes()自动获取图例。所以就这么做吧。

ggplot(data = chart1_data, aes(x = entity, y = usage, fill = medicine)) +
    geom_bar(stat = "identity",
             position = position_dodge(),
             show.legend = TRUE) +
    geom_hline(data = chart1_means, aes(yintercept = value, color = label)) +
    scale_fill_manual("means",
                      values = colors) +
    scale_color_manual("lines (means?)",
                       values = colors,
                       guide = guide_legend(override.aes = list(fill = NA)))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述