Если вы не заинтересованы в использовании именно этих цветов, вы можете просто использовать sns.scatterplot
, как в этом коде, без необходимости отображать каждый цвет:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from random import sample
import seaborn as sns
N = 100
data = pd.DataFrame({'GDP': np.random.random(N),
'Air pollution (ug/m3)': np.random.random(N),
'Region': sample(['Africa',
'Americas',
'Eastern Mediterranean',
'Europe',
'South-East Asia',
'Western Pacific']*N, N)})
sns.scatterplot(data = data,
x = 'GDP',
y = 'Air pollution (ug/m3)',
hue = 'Region')
plt.legend(bbox_to_anchor = (1.05, 0.98), loc = 'upper left')
plt.show()
![enter image description here](https://i.stack.imgur.com/piW86.png)
Otherwise, if you want to mantain your colors, you can re-define the cycler:
import matplotlib.pyplot as plt
from random import sample
import seaborn as sns
from cycler import cycler
N = 100
data = pd.DataFrame({'GDP': np.random.random(N),
'Air pollution (ug/m3)': np.random.random(N),
'Region': sample(['Africa',
'Americas',
'Eastern Mediterranean',
'Europe',
'South-East Asia',
'Western Pacific']*N, N)})
default_cycler = cycler(color=['red', 'green', 'blue', 'yellow', 'black', 'orange'])
plt.rc('axes', prop_cycle=default_cycler)
sns.scatterplot(data = data,
x = 'GDP',
y = 'Air pollution (ug/m3)',
hue = 'Region')
plt.legend(bbox_to_anchor = (1.05, 0.98), loc = 'upper left')
plt.show()
![enter image description here](https://i.stack.imgur.com/nfWKQ.png)
Regarding interactivity, as exposed здесь :
Как и в любом другом случае, вы определяете аргумент picker
и подключаете функцию обратного вызова
В вашем случае:
sns.scatterplot(data = data,
x = 'GDP',
y = 'Air pollution (ug/m3)',
hue = 'Region',
picker = 4)
plt.legend(bbox_to_anchor = (1.05, 0.98), loc = 'upper left')
def onpick(event):
origin = data.iloc[event.ind[0]]['Country']
plt.gca().set_title('Selected item came from {}'.format(origin))
plt.gcf().canvas.mpl_connect('pick_event', onpick)