Легенда Scatterplot из цветного dict python

Для df ниже я пытаюсь изменить legend из scatter plot для отображения Column C ценности.

Он работает, когда значения являются плавающими, но когда я пытаюсь вставить строки, он возвращает ValueError. ValueError: could not convert string to float: 'Y'

import pandas as pd
import matplotlib.pyplot as plt

d = ({
      'A' : [1,2,3,4,5,6,7,8,9,10],
      'B' : [1,1,1,2,2,2,7,7,7,7],     
     #'C' : ['X','Y','Z','X','Y','Z','A','X','Y','Z'],  #Doesn't work 
      'C' : [2,4,6,8,2,4,6,8,10,2],    # Works
      })

df = pd.DataFrame(data=d)

fig,ax = plt.subplots()

x = df['A']
y = df['B']
classes = df['C']
unique = list(set(classes))
colors = [plt.cm.jet(float(i)/max(unique)) for i in unique]
for i, u in enumerate(unique):
    xi = [x[j] for j  in range(len(x)) if classes[j] == u]
    yi = [y[j] for j  in range(len(x)) if classes[j] == u]
    plt.scatter(xi, yi, c=colors[i], label=str(u))
plt.legend()

До сих пор при попытке использовать строки я пытался изменить float в str (как показано ниже):

colors = [plt.cm.jet(float(i)/max(unique)) for i in unique]
colors = [plt.cm.jet(str(i)/max(unique)) for i in unique]

Возвращается TypeError: unsupported operand type(s) for /: 'str' and 'str'

Предполагаемый вывод (но я бы хотел, чтобы в легенде были строки, поэтому 'X','Y','Z' вместо 2,4,6):

0 ответов

Другие вопросы по тегам