在ggplot中需要geom_hline的第二个传奇

时间:2016-04-28 22:23:27

标签: r ggplot2 legend

我是R的相对新手,我正在编写代码,使用ggplot2从一些非常基本的数据创建图表。我的绘图代码目前看起来像这样:

chart1_data = read.csv(data_file, as.is=T)
chart1_means = read.csv(means_file, as.is=T)

p = ggplot(data=chart1_data, aes(x=entity, y=usage, fill=medicine)) +
geom_bar(stat="identity", position=position_dodge()) +
geom_hline(data=chart1_means, aes(yintercept=value), show.legend=FALSE)

这绘制了一个分组竖条的图表,条形图上的黑色水平线代表平均值,并有一个图例显示垂直条的颜色编码。

我想做几件事:

  1. 以颜色显示水平线(geom_hline)(R具有的默认颜色组,映射到chart1_means表中不同数量的线)

  2. 显示第二个图例,显示这些线条颜色并映射到chart1_means文件中的第1列值,该文件是文本标签。

  3. 为清楚起见,chart1_means CSV文件如下所示:

    label,value
    USA Codeine mean, 14.2
    Canada Codeine mean, 12.7
    etc.
    

    chart1_data CSV文件如下所示:

    year,medicine,entity,usage,units
    2006,Codeine,Mexico,0.8,mg/capita
    2006,Codeine,Cuba,NA,mg/capita
    etc.
    

    我用谷歌用Google搜索失败了。似乎有很多方法可以做类似的事情,但我发现没有什么是非常适用的。

    更新更新更新

    我采用了bethanyP的建议来设计更接近正确但仍然错误的东西。代码目前看起来像这样:

    chart1_data = read.csv(data_file, as.is=T)
    chart1_means = read.csv(means_file, as.is=T)
    
    means_labels = chart1_means$label
    colors = rainbow(length(means_labels))
    
    p = 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)))
    

    结果是彩色线条覆盖彩色条纹(好),但仍然只有一个图例。图例的标题为“均值”(面向行的数据),但显示“药物”的颜色和标签(条形数据)。

    我想我可能会这样做:

    scale_fill_manual("means", values=colors, labels=means_labels)
    

    但是这会填充标题为“means”的单个图例,与条形相关联的颜色以及作为“means_labels”子集的标签(因为条形线比平均线条少)。

    我几乎陷入僵局。仍然需要来自两个不同数据系列的两个传说。还有其他建议吗?

1 个答案:

答案 0 :(得分:1)

componentDidUpdate添加到show_guide = TRUE美学,以明确告诉它为主要图例的情节制作图表内容的图例。

geom_bar

只需将参数+ geom_bar(stat="identity", position=position_dodge(), show_guide = TRUE) 添加到hline,即可获得color = "red"中的颜色。当你在它时,添加一个geom_hline参数来标记第二个图例中的线条,特别是如果你要添加多行不同颜色的线条。

fill="some text here"

然后你可以使用+ geom_hline(data=chart1_means, aes(yintercept=value), fill="mean", color="red") + geom_hline(data=chart1_sd, aes(yintercept=value), fill="Standard Deviation", color="pcreateurple") scale_fill一起使用来让你回家的其余部分。

guide=guide_legend

您还可以创建一个变量来保存颜色列表,并通过使用变量名和一个整数来指定它们,以指定列表中使用调色板作为容器的颜色。

如果您遇到颜色和线条不符合预期的问题以及图例中包含错误内容的问题,请查看ggplot函数行的顺序。

如果+ scale_fill_manual("Means & SD", guide=guide_legend(override.aes = list(color=c('purple", "red"))) 之前scale_fill_manual它可能会着色并为错误的审美建立一个传奇,就像你的酒吧一样。剪切并粘贴,直到你将它们放在正确的位置。

ggplot非常强大,完全不直观。我随时都会随身携带备忘单来帮助解决这些问题。没有羞耻感。 Rstudio有一个很好的。