【问题标题】:How to add legend in plotnine for multiple curves when "tidy data" is not the issue当“整洁的数据”不是问题时,如何在 plotnine 中为多条曲线添加图例
【发布时间】:2020-09-29 12:36:48
【问题描述】:

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

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

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

这也应该在plotnine 中工作吗?我尝试了一个类似于previous link 的示例。没有图例也可以正常工作:

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)".

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

【问题讨论】:

    标签: python ggplot2 plotnine


    【解决方案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

    【讨论】:

      【解决方案2】:

      将颜色放在引号中,例如 '"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')
      )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-06-17
        • 2019-04-24
        • 1970-01-01
        • 2016-08-14
        • 2021-11-14
        • 2018-02-01
        • 2020-01-01
        相关资源
        最近更新 更多