我试图改变Seaborn在图上使用的默认颜色方案,我只是想要一些简单的东西,例如他们文档中显示的HLS方案。然而他们的方法似乎不起作用,我只能假设这是由于我使用“色调”,但我无法弄清楚如何让它正常工作。这是当前代码,datain只是一个正确数字列数的文本文件,p为索引值:
import pandas as pd
import numpy as np
datain = np.loadtxt("data.txt")
df = pd.DataFrame(data = datain, columns = ["t","p","x","y","z"])
ax3 = sns.lineplot("t", "x", sns.color_palette("hls"), data = df[df['p'].isin([0,1,2,3,4])], hue = "p")
plt.show()
代码从文件中绘制出前几个数据集,如果我不包含sns.color_palette函数,它们会出现奇怪的紫色柔和选择,即seaborn似乎默认为。如果我包含它我得到错误:
TypeError:lineplot()为关键字参数'hue'获取了多个值
鉴于lineplot函数接受的格式,这看起来有点奇怪。
第一件事:你需要坚持正确的语法。通过palette
参数提供调色板。只是将它作为lineplot
的第三个参数将其解释为lineplot
的第三个参数恰好是hue
。
然后,您需要确保调色板具有与具有不同p
值的颜色一样多的颜色。
import seaborn as sns
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
datain = np.c_[np.arange(50),
np.tile(range(5),10),
np.linspace(0,1)+np.tile(range(5),10)/0.02]
df = pd.DataFrame(data = datain, columns = ["t","p","x"])
ax = sns.lineplot("t", "x", data = df, hue = "p",
palette=sns.color_palette("hls", len(df['p'].unique())))
plt.show()