Легенда многоцветного рассеяния в Python - PullRequest
0 голосов
/ 18 мая 2018

У меня есть некоторые базовые данные о размере двигателя, лошадиных силах и типе кузова (образец показан ниже)

         body-style  engine-size  horsepower
0   convertible          130       111.0
2     hatchback          152       154.0
3         sedan          109       102.0
7         wagon          136       110.0
69      hardtop          183       123.0

Из которых я сделал график рассеяния с мощностью в лошадиных силах по оси x, размером двигателя по оси y ииспользование стиля тела в качестве цветовой схемы для дифференциации классов тела и.Я также использовал «степень сжатия» каждого автомобиля из отдельного информационного кадра, чтобы определить размер точки

. Это сработало хорошо, за исключением того, что я не могу отобразить цветовые легенды для своего графика.Помощь нужна, так как я новичок.

Вот мой код:

dict = {'convertible':'red' ,  'hatchback':'blue' , 'sedan':'purple' , 'wagon':'yellow' , 'hardtop':'green'}

wtf["colour column"] = wtf["body-style"].map(dict)
wtf["comp_ratio_size"] = df['compression-ratio'].apply ( lambda x : x*x)

fig = plt.figure(figsize=(8,8),dpi=75)
ax = fig.gca()
plt.scatter(wtf['engine-size'],wtf['horsepower'],c=wtf["colour column"],s=wtf['comp_ratio_size'],alpha=0.4)
ax.set_xlabel('horsepower')
ax.set_ylabel("engine-size")
ax.legend()

1 Ответ

0 голосов
/ 18 мая 2018

В matplotlib вы можете легко создать пользовательских легенд .В вашем примере просто извлеките комбинации цветовых меток из своего словаря и создайте пользовательских патчей для легенды:

import matplotlib.pyplot as plt
from matplotlib.lines import Line2D
import matplotlib.patches as mpatches
import pandas as pd

#this part just recreates your dataset
wtf =  pd.read_csv("test.csv", delim_whitespace=True)
col_dict = {'convertible':'red' ,  'hatchback':'blue' , 'sedan':'purple' , 'wagon':'yellow' , 'hardtop':'green'}
wtf["colour_column"] = wtf["body-style"].map(col_dict)
wtf["comp_ratio_size"] = np.square(wtf["horsepower"] - wtf["engine-size"])

fig = plt.figure(figsize=(8,8),dpi=75)
ax = fig.gca()
ax.scatter(wtf['engine-size'],wtf['horsepower'],c=wtf["colour_column"],s=wtf['comp_ratio_size'],alpha=0.4)
ax.set_xlabel('horsepower')
ax.set_ylabel("engine size")

#retrieve values from color dictionary and attribute it to corresponding labels
leg_el = [mpatches.Patch(facecolor = value, edgecolor = "black", label = key, alpha = 0.4) for key, value in col_dict.items()]
ax.legend(handles = leg_el)

plt.show()

Вывод:

enter image description here

...