Я много борюсь с изменением меток в легенде в диаграммах matplotlib. Это мой график:
Я хотел бы изменить легенду, чтобы метки основывались на значениях в столбце с именем «name», а не на имени столбца.
Вот как я создал исходный график:
ax = plt.figure()
df.iloc[3000:3005,:].loc[:,float_cols].T.plot(figsize=(10,6))
plt.title('title',size=(20))
plt.ylabel('Y', size=(14))
plt.xlabel('x', size=(14))
Вот как я пытался изменить легенду на имя столбца:
targets = df['name']
ax = plt.figure()
df.iloc[3000:3005,:].loc[:,float_cols].T.plot(figsize=(10,6).label=targets)
plt.title('title',size=(20))
plt.ylabel('Y', size=(14))
plt.xlabel('x', size=(14))
, но это не так т работа. Я также пробовал другие способы, такие как использование plt.legend, но это не сработало.
Моя конечная цель: изменить легенду так, чтобы метки основывались на названиях этих наблюдений (из столбца имя)
Редактировать: я пытался:
plt.figure()
for i in range(df.shape[1]):
plt.plot(df, df.iloc[3000:3005,:].loc[:,float_cols], label = df.columns['name'])
plt.legend()
plt.tight_layout()
plt.show()
, но это не сработало, я получил эту ошибку:
IndexError: только целые числа, ломтики (:
), многоточие (...
), numpy .newaxis (None
) и целочисленные или логические массивы являются допустимыми индексами
также пытались это сделать:
plt.figure()
for i in range(df.shape[1]):
plt.plot(df, df.iloc[3000:3005,:].loc[:,float_cols], label = df.columns[i])
plt.legend()
plt.tight_layout()
plt.show()
Но также получена ошибка:
ValueError: x и y должны иметь одинаковое первое измерение, но иметь формы (8606, 444) и (5, 438)
РЕДАКТИРОВАТЬ 2: пробовал это:
targets = df['name']
plt.figure()
for i in range(df.shape[1]):
plt.plot(df.iloc[3000:3005,:], label = targets[i])
plt.legend()
plt.tight_layout()
plt.show()
получил ошибку:
в 3 plt.figure () 4 для i в диапазоне (df.shape 1 ): ----> 5 plt.plot (df.iloc [3000: 3005 ,:], label = target [i]) 6 7 plt.legend ()
~ .conda \ envs \ reut \ lib \ site-packages \ pandas \ core \ series.py в getitem (self, key) 869 key = com.apply_if_callable (key , self) 870 try: -> 871 result = self.index.get_value (self, key) 872 873, если не is_scalar (result):
~ .conda \ envs \ reut \ lib \ site-packages \ pandas \ core \ indexes \ base.py в get_value (self, series, key) 4403 k = self._convert_scalar_indexer (k, kind = "getitem") 4404 try: -> 4405 вернуть self._engine.get_value (s, k , tz = getattr (series.dtype, "tz", None)) 4406 за исключением KeyError как e1: 4407, если len (self)> 0 и (self.holds_integer () или self.is_boolean ()):
pandas_libs \ index.pyx в pandas ._ libs.index.IndexEngine.get_value ()
pandas_libs \ index.pyx в pandas ._ libs.index.IndexEngine.get_value ()
pandas_libs \ index.pyx в pandas ._ libs.index.IndexEngine.get_lo c ()
pandas_libs \ hashtable_class_helper.pxi в pandas ._ libs.hashtable.Int64HashTable.get_get_63 (63) *
pandas_libs \ hashtable_class_helper.pxi в pandas ._ libs.hashtable.Int64HashTable.get_item ()
KeyError: 0