0

当曲线因要绘制的行的选择而不同时,有几个人询问如何在多条曲线中添加图例ggplot2或为多条曲线添加图例。plotnine典型的答案是将数据重新格式化为整洁的数据这里这里这里有一些例子。

我需要多行不是因为对数据进行子集化,而是因为我想比较平滑方法。所有行的数据都相同,因此上述答案无济于事。

后两个答案指出,ggplot2在 R 中,可以通过将说明color符移动到内部来创建图例aes(...)这里有详细描述,和我想做的差不多。

这也应该起作用plotnine吗?我尝试了一个类似于上一个链接的示例。没有图例它工作正常:

from plotnine import *
from plotnine.data import *

(ggplot(faithful, aes(x='waiting'))
    + geom_line(stat='density', adjust=0.5, color='red')
    + geom_line(stat='density', color='blue')
    + geom_line(stat='density', adjust=2, color='green')
    + labs(title='Effect of varying KDE smoothing parameter',
           x='Time to next eruption (min)',
           y='Density')
)

没有图例的图表

但是当我为了获得传奇而color搬进去时它失败了:aes

from plotnine import *
from plotnine.data import *

(ggplot(faithful, aes(x='waiting'))
    + geom_line(aes(color='red'), stat='density', adjust=0.5)
    + geom_line(aes(color='blue'), stat='density')
    + geom_line(aes(color='green'), stat='density', adjust=2)
    + labs(title='Effect of varying KDE smoothing parameter',
           x='Time to next eruption (min)',
           y='Density')
    + scale_color_identity(guide='legend')
)

这给出了错误 PlotnineError: "Could not evaluate the 'color' mapping: 'red' (original error: name 'red' is not defined)"

关于如何添加图例的任何建议?谢谢。

4

2 回答 2

1

将颜色放在引号中,例如'"red"'而不是'red'.

(ggplot(faithful, aes(x='waiting'))
    + geom_line(aes(color='"red"'), stat='density', adjust=0.5)
    + geom_line(aes(color='"blue"'), stat='density')
    + geom_line(aes(color='"green"'), stat='density', adjust=2)
    + labs(title='Effect of varying KDE smoothing parameter',
           x='Time to next eruption (min)',
           y='Density')
    + scale_color_identity(guide='legend')
)
于 2020-09-29T13:19:56.070 回答
1

看起来您发布的最后一个链接在正确的轨道上,但您必须欺骗 python 来克服 R 所做的一些非标准评估。我可以通过在颜色名称周围设置两组引号来使其工作:

(ggplot(faithful, aes(x='waiting'))
    + geom_line(aes(color="'red'"), stat='density', adjust=0.5)
    + geom_line(aes(color="'blue'"), stat='density')
    + geom_line(aes(color="'green'"), stat='density', adjust=2)
    + labs(title='Effect of ...',
           x='Time to next eruption (min)',
           y='Density')
    + scale_color_identity(guide='legend',name='My color legend')
)

1

您可以像帖子一样制作自己的标签:

(ggplot(faithful,aes(x='waiting'))
 + geom_line(aes(color="'red'"),stat='density',adjust=.5)
 + geom_line(aes(color="'blue'"),stat='density')
 + geom_line(aes(color="'green'"), stat='density',adjust=2)
 +labs(title='Effect of ...',x='Time to next eruption (min)',
       y='Density')
 + scale_color_identity(guide='legend',name='My colors',
                        breaks=['red','blue','green'],
                        labels=['Label 1','Label 2','Label 3']))

2

于 2020-09-29T13:20:43.370 回答