我用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'])

最佳答案

我认为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参数是执行此操作的方法。

10-06 06:30