如何使用 df.plot() 推断图例

How to infer legend using df.plot()

如何推断和显示图例?

import matplotlib.pyplot as plt
import pandas as pd

df = pd.read_csv('iris.csv')
for i, s in enumerate(species := df['species'].drop_duplicates().values):
    df.loc[df['species'] == s, 'c'] = i
df.plot(kind='scatter', x='sepal_length', y='sepal_width', c='c', cmap='viridis')
plt.show()

这导致:

我尝试调用 plt.legend(species) 希望显示 3 个物种名称,但只显示了 3 个中的 1 个,为什么?有没有办法以某种方式以与 c='c'?

相同的方式推断它

df.plot(kind='scatter', x='sepal_length', y='sepal_width', c='c', cmap='viridis' , 图例 = 真)

添加 legend=True 有用吗?

您可以使用 seaborn 库,让您的生活更轻松:

import seaborn as sns
sns.FacetGrid(iris, hue ="class",
          height = 6).map(plt.scatter,
                          'sepallength',
                          'sepalwidth').add_legend()

但如果你非要按照你的方式去做,我认为最简单的方法是将每个类别在一个for循环中分开,如下所示:

iris_df=pd.read_csv('iris.csv')
for i in range(0, 3):    
    species_df = iris_df[iris_df['class'] == i]    
    plt.scatter(        
    species_df['sepal_length'],        
    species_df[''],
    color=colours[i],        
    alpha=0.5,        
    label=species[i]   
)

plt.xlabel('sepal length (cm)')
plt.ylabel('sepal width(cm)')
plt.title('Iris dataset: petal length vs sepal length')
plt.legend(loc='lower right')

plt.show()