seaborn tsplot:传奇色彩褪色

时间:2017-07-26 14:19:26

标签: python matplotlib seaborn

在我的seaborn tsplot中,颜色与绘制的线条不匹配:

Colors don't match the lines drawn.

for item in item_list:
    sns.tsplot(get_data(), color=get_color(), legend=True)

sns.plt.legend(labels=item_list)
sns.plt.show()

我阅读了sns.tsplot和plt.legend文档页面,无法想到为什么会发生这种情况。

1 个答案:

答案 0 :(得分:2)

tsplot添加了一些行周围低alpha的区域。即使它们不可见(因为绘制了一条线),它们也会进入图例。

解决方法是直接从图中获取线条:

h = plt.gca().get_lines()
plt.legend(handles=h, labels=item_list)

完整示例:

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

item_list = list("ABXY")

get_data = lambda : np.random.rand(10)
get_color = lambda : "#" + "".join(np.random.choice(list("02468acef"), size=6))

for item in item_list:
    sns.tsplot(get_data(), color=get_color())

h = plt.gca().get_lines()
plt.legend(handles=h, labels=item_list)

plt.show()

enter image description here

我要提一下,在这种情况下似乎没有理由使用tsplot。简单的线图(plt.plot)就足够了,并且混淆的可能性较小。吹气代码产生与上述完全相同的输出。

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

item_list = list("ABXY")

get_data = lambda : np.random.rand(10)
get_color = lambda : "#" + "".join(np.random.choice(list("02468acef"), size=6))

for item in item_list:
    plt.plot(get_data(), color=get_color(), label=item)

plt.legend()
plt.show()