2016-04-28 27 views
0

我是一个相对新手到R,我正在编写代码使用ggplot2从一些漂亮的基本数据创建图表。我的绘图代码目前看起来是这样的:在ggplot需要第二个传说geom_hline的

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的值,这是文本标签。

为了清楚起见,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_labels“(因为条数线比条数线少)。

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

回答

1

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

+ geom_bar(stat="identity", position=position_dodge(), show_guide = TRUE) 

你可以简单地通过添加参数,color = "red"geom_hline得到的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_fillguide=guide_legend,让你在回家的路上休息。

+ scale_fill_manual("Means & SD", guide=guide_legend(override.aes = list(color=c('purple", "red"))) 

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

如果您的颜色和线条不符合您的期望,并且图例中有错误的东西,请查看您的ggplot函数行的顺序。

如果您在geom_hline之前有scale_fill_manual,它可能会着色并为您的酒吧创建错误审美的图例。剪切并粘贴,直到您将它们放在正确的位置。

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

+0

我已经更新了我的代码到它的当前窗体。 – Barry

相关问题