更改线宽时,Seaborn FacetGrid图例会丢失线条样式细节

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了更改线宽时,Seaborn FacetGrid图例会丢失线条样式细节相关的知识,希望对你有一定的参考价值。

如果我通过FacetGrid()更改plt.plot实例的线宽.map()我会丢失图例中linestyle的细节。在此图中,线条图可以从图形Example 2中正确显示

但是,如果我增加线宽z,则不再正确显示linestyle

Example 1

如果要重现图形,这是代码,

import numpy as np
import seaborn as sbn
import pandas as pd
import matplotlib.pyplot as plt
x = np.tile(np.linspace(0,10,11),2)
y = np.linspace(1,11,11)
z = np.linspace(2,12,11)
yz = np.append(y,z)
y_or_z = np.repeat(['y','z'],11)
df = pd.DataFrame(data={'x':x,'yz':yz,'y_or_z':y_or_z})
g=sbn.FacetGrid(data = df, size=4, aspect=1.2, hue = 'y_or_z', hue_kws=dict(ls=['-','-.']))
g.map(plt.plot,'x','yz', lw=4).add_legend()
g.savefig('ex1')
g=sbn.FacetGrid(data = df, size=4, aspect=1.2, hue = 'y_or_z', hue_kws=dict(ls=['-','-.']))
g.map(plt.plot,'x','yz').add_legend()
g.savefig('ex2')
答案

您可能会注意到第二个图中的橙色线比蓝色线短。因此图例确实显示了正确的线条样式,但图例句柄不足以容纳完整的线条样式。

您当然可以更改手柄长度,以便完整的线型循环适合它,例如

g.add_legend(handlelength=10) 

enter image description here

handlelength参数记录在matplotlib legend documentation中:

handlelength:浮动或无 图例处理的长度。以字体大小单位测量。默认值为None,它将采用legend.handlelength rcParam中的值。

以上是关于更改线宽时,Seaborn FacetGrid图例会丢失线条样式细节的主要内容,如果未能解决你的问题,请参考以下文章

Seaborn facetgrid将逗号添加到y轴标签[重复]

seaborn使用FacetGrid函数可视化山脊图(Ridgeline Plot with Seaborn)

Seaborn displot 'FacetGrid' 对象不可调用

如何反转 seaborn 图形级别图的轴(FacetGrid)

如何使用 Seaborn 创建 FacetGrid 堆叠条形图?

如何在 seaborn 的 facetgrid 中设置可读的 xticks?