如何解决python中的图例颜色问题?

时间:2019-07-02 12:36:23

标签: python seaborn legend

我用seaborn绘制了两个点图。当我使用plt.legend时,图例的颜色是相同的,并且没有区别。问题是图例中so2和no2的颜色均为蓝色。我认为它只是选择查询第二行的颜色。

ax=plt.subplots(figsize=(15,5))
sns.pointplot(x='Year', y='no2', data=AP_trend)
sns.pointplot(x='Year', y='so2', data=AP_trend, color = 'r')
plt.legend(labels=['no2', 'so2'])

2 个答案:

答案 0 :(得分:1)

我认为hue参数是您正在寻找的参数,需要预先进行一些数据操作。 我只将2列用于x和y轴,将第三列用于图例。 所以这样的事情应该起作用:

# data manipulation
x = df['Year'].values
x = np.hstack((x, x))  # stacking 2 times the same x as no2 and so2 vectors share the same Year vector

y = df['no2'].values
y = np.hstack((y, df['so2'].values)) # stacking so2 and no2 values

z1 = ['no2' for i in range(len(df))]
z2 = ['so2' for i in range(len(df))]
z = np.hstack((z1, z2)) # first part of the dataframe correspond to no2 values, the remaining correspond to so2 values

df2 = pd.DataFrame(data= {'Year': x, 'y' : y, 'legend' : z})

sns.pointplot(x='Year', y='y', hue='legend', data=df2)

编辑:在Seaborn中,没有理由像您所做的那样绘制2个地块。 hue参数是实现此目的的方法。

答案 1 :(得分:0)

尝试在您的图例调用中添加frameon=True吗?

plt.legend(labels=['no2', 'so2'], frameon=True)

如果图例看起来不够好, 制作plt对象时,还有更多选项可以尝试。


我会对其进行测试,但是这4行不足以运行一个最小的示例。