2014-06-30 128 views
-1

我试图将贝叶斯网络可视化,并且由于线条的密度,我决定使用亮度梯度来可视化边缘的方向(暗 - >亮)。但是,正因为如此,我不得不在geom_path()语句中手动定义颜色,并使用scale_fill_identity()而不是我通常使用的scale_fill_gradient()。我现在的图形看起来是这样的:如何将自定义比例添加到ggplot2中的图例中?

enter image description here

我想要做的就是添加一个渐变的规模,从蓝色变为黄色与用户定义的值,从而使他人能够看一个传说,告诉什么所有链接的权重是(它们都是无单位的)。饱和度和亮度都与原始颜色不同,但色调相同。

编辑:这里是你可以工作的例子:

ggplot(data.frame(x=1),aes(x=x,y=1,color='red',fill='blue'))+ 
scale_color_identity()+scale_fill_identity()+geom_bar(stat='identity') 

怎样才能插入任意颜色渐变规模到这一点?

编辑2:我发现通过从其他地块的传说手动插入这样的一种迂回的方式:Control over legends of multiple layer plot in ggplot2

是否有这样做的任何少哈克的方式?

+0

请参阅http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example – csgillespie

+0

问题很简单:是否可以添加图例和缩放而不必创建任何映射元素? 我已经使用填充的行和scale_color_identity行。这意味着我不能使用映射元素添加另一种基于颜色的比例。 'guides(color = colorbar(...))'选项不起作用,因为没有用于任何比例的输入参数,并且默认情况下它需要连续变量。制作图表需要200多行代码,但我所要求的是如何放置自定义比例。我进入了一个基本的例子,但似乎微不足道。 –

回答

0

要用ggplot轻松添加图例,您需要一个映射。为你的样品

ggplot(data.frame(x=1),aes(x=x,y=1,color="boxcol",fill=1))+ 
    scale_fill_gradient(name="Fill")+ 
    scale_colour_manual(name="Color",values=c(boxcol="blue"))+ 
    geom_bar(stat='identity') 

会为颜色和填充添加图例。假设这个例子是你实际做的准确的表示,那么这应该起作用。您应该对它们进行编码,而不是在geom_path中指定文字颜色值。

+0

我必须明确定义颜色的原因是因为我需要我指定的线条的亮度渐变。没有我知道的RGB或HSV美学(后者在很多情况下肯定会有用)。另一种方法是只使用尺寸,这很难与所涉及的距离进行区分,或者使用箭头,这些图形极难在这样的图形上读取。 我发现了一个使用grobs的解决方法,但它看起来像一个丑陋的解决方案。 –

+0

我不明白你为什么不能使用'scale_colour_gradientn'和你手动设置的所有颜色列表?如果您已经创建了自己的斜坡,然后插入。传递256色左右以在所需的色彩空间中平滑过渡。 – MrFlick

+0

如果您可以为您的真实问题创建更现实的例子,那么提供具体建议会更容易。它不一定是(也不应该是)你的整个数据和200行代码。它应该很小,但足以说明问题。 – MrFlick