Я пытаюсь настроить легенды каждой точки на точечной диаграмме. Моя главная проблема в том, что цвета каждой точки не соответствуют цвету того, что в легенде. Что я делаю не так и как это исправить?
def scatter(self, indep, dep, labl):
x = self.df_input[indep]
y = self.df_input[dep]
random = np.random.RandomState(0)
colors = random.rand(len(labl)+1)
fig = plt.figure()
ax = fig.add_subplot(111)
for leg in labl:
ax.scatter(x, y, c=colors, cmap='gist_ncar', label=leg)
ax.legend()
ax.set_xlabel(indep)
ax.set_ylabel(dep)
ax.axis('tight')
plt.show()
У вас есть только один набор x
и y
, поэтому я думаю, что вы хотите сделать только один сюжет. Я не думаю, что вам нужно зацикливаться на labl
вообще. Вы используете цветовую карту (cmap
) для окрашивания точек данных, так что это соответствующее свойство. Вместо plt.legend()
попробуйте plt.colorbar()
. Может быть, это будет иметь больше смысла для вас.
@ImportanceOfBeingErnest Результаты выглядят как точечная диаграмма с точками разного цвета и меткой / легендой того, что представляют эти точки. Моя основная проблема заключается в том, что цвета метки/легенды не соответствуют соответствующему цвету точки на диаграмме рассеивания. Метод принимает строковые переменные indep и dep и список лаблов или меток. Я уже установил фрейм данных ранее в коде. Мой ожидаемый результат - точечная диаграмма с легендами.
Похоже, вы пытаетесь построить группы в фрейме данных. Итак, что-то вроде этого может работать:
import matplotlib.pyplot as plt
import pandas as pd
data = [['a', 1, 3],
['a', 2, 2],
['b', 2, 4],
['b', 1, 5],
['b', 3, 5],
]
df = pd.DataFrame(data, columns=['cat', 'x', 'y'])
for name, group in df.groupby('cat'):
plt.scatter(group.x, group.y, label=name)
plt.legend()
Это производит:
Можете ли вы объяснить, как вы хотите, чтобы результат выглядел? Вам нужен этот ответ?