如果我通过FacetGrid()。map()更改plt.plot实例的线宽,则会丢失图例中线型的详细信息。在此图中,线型可以从图python - Seaborn FacetGrid图例在更改线宽时会丢失线型细节-LMLPHP正确看到

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

python - Seaborn FacetGrid图例在更改线宽时会丢失线型细节-LMLPHP

如果您想复制图形,请使用以下代码:

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)


python - Seaborn FacetGrid图例在更改线宽时会丢失线型细节-LMLPHP

handlelength参数记录在matplotlib legend documentation中:


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

关于python - Seaborn FacetGrid图例在更改线宽时会丢失线型细节,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49086528/

10-11 01:11