seaborn tsplot:图例颜色已褪色
seaborn tsplot: legend colors are faded
在我的 seaborn tsplot
中,颜色与绘制的线条不匹配:
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 文档页面,但不明白为什么会这样。
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()
让我提一下,在这种情况下似乎没有理由使用 tsplot
。一个简单的线图 (plt.plot
) 就足够了,而且混淆的可能性较小。 blow代码产生与上面完全相同的输出。
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()
在我的 seaborn tsplot
中,颜色与绘制的线条不匹配:
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 文档页面,但不明白为什么会这样。
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()
让我提一下,在这种情况下似乎没有理由使用 tsplot
。一个简单的线图 (plt.plot
) 就足够了,而且混淆的可能性较小。 blow代码产生与上面完全相同的输出。
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()