Легенда 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
):