Как я могу решить проблему цвета легенды в python? - PullRequest
1 голос
/ 02 июля 2019

Я использовал Seaborn, чтобы построить два poinplot. когда я использую 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 ]

1 голос
/ 02 июля 2019

Я думаю, что параметр 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 - способ сделать это.

0 голосов
/ 02 июля 2019

Попробуйте добавить frameon=True в вызове легенды?

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

Если легенда не выглядит достаточно хорошо, При создании объекта plt есть еще варианты.


Я бы проверил это, но этих 4 строк недостаточно для запуска минимального примера.

...