【发布时间】:2016-04-28 22:23:27
【问题描述】:
我是 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)
这绘制了一个分组垂直条的图表,黑色水平线穿过代表平均值的条,并有一个图例显示垂直条的颜色编码。
我想做几件事:
以颜色显示水平线 (geom_hline)(R 具有的默认颜色集,映射到 chart1_means 表中不同数量的线)
显示第二个图例,显示这些线条颜色并映射到 chart1_means 文件中的第 1 列值,这是一个文本标签。
为清楚起见,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.
我在谷歌上搜索了这个,但没有成功。似乎有很多方法可以做类似的事情,但我找不到非常适用的方法。
更新更新更新
我接受了 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”子集的标签填充单个图例(因为条形比均值线少)。
我几乎陷入了僵局。仍然需要来自两个不同数据系列的两个图例。还有其他建议吗?
【问题讨论】: