微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在“plotnine”图例中合并颜色和形状

如何解决在“plotnine”图例中合并颜色和形状

plotnine 传说中的颜色和形状如何融合? 在 R 中似乎是可能的。但我无法让它在 plotnine 中工作......

这是一个例子:

from plotnine import ggplot,geom_point,aes,stat_smooth,facet_wrap
from plotnine.data import mtcars

(
    ggplot(mtcars,aes('cyl','mpg',color='factor(gear)',shape='factor(vs)'))
     + geom_jitter()
)

这将创建以下图表:

enter image description here

我想在传说中将装备和 vs 结合起来。 所以红色圆圈表示gear = 3,vs = 0;红色三角形表示 齿轮= 3,vs = 1;等

... 就像那些在 以下关于 R 的帖子:

How to merge color,line style and shape legends in ggplot

Combine legends for color and shape into a single legend

这在 plotnine 中可能吗?非常感谢任何帮助!

解决方法

这是您第二个链接中答案的 Python 改编版

如果要更改图例名称,则必须在两个 name 函数中使用 scale_*_manual 参数。

from plotnine import ggplot,geom_point,aes,stat_smooth,facet_wrap,geom_jitter
from plotnine.data import mtcars
import plotnine as p9

# add a column that combines the two columns
new_mtcars = mtcars
new_mtcars['legend_col'] = ['Gear: {} Vs: {}'.format(gear,vs)
                            for gear,vs in zip(new_mtcars.gear,mtcars.vs)]

# specify dicts to use for determining colors and shapes
gear_colors = {3:'red',4:'blue',5:'gray'}
vs_shapes = {0:'^',1:'o'}

# make the plot with scale_*_manual based on the gear and vs values
(
    ggplot(mtcars,aes('cyl','mpg',color='legend_col',shape='legend_col'))
     + geom_jitter()
     + p9.scale_color_manual(values=[[gear_colors[i] for i in list(new_mtcars.gear.unique())
                                      if 'Gear: {}'.format(i) in label][0]
                                     for label in new_mtcars.legend_col.unique()],labels = list(new_mtcars.legend_col.unique()),name='My legend name')
     + p9.scale_shape_manual(values=[[vs_shapes[i] for i in list(new_mtcars.vs.unique())
                                      if 'Vs: {}'.format(i) in label][0]
                                     for label in new_mtcars.legend_col.unique()],name='My legend name')
)

plot with combined legend

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。