簡體   English   中英

在散點圖中為 Iris 數據集使用不同的顏色

[英]Use different colors in scatterplot for Iris dataset

我正在學習 Python 中的數據分析並使用 matplotlib 和 seaborn 庫,並在 Kaggle 中制作了一個 Notebook。 我試圖制作一個散點圖,顯示萼片和花瓣葉的寬度和長度之間的比率。

sns.FacetGrid(iris, hue="Species", size=10) 

total_rows = iris.count
number_of_iris = len(iris)

sepalLengths = iris["SepalLengthCm"]
sepalWidths = iris["SepalWidthCm"]

petalLengths = iris["PetalLengthCm"]
petalWidths = iris["PetalWidthCm"]

plt.scatter(range(number_of_iris),(sepalLengths/sepalWidths))
plt.xlabel("ID")
plt.ylabel("Ratio")
plt.show()

輸出是在此處輸入圖片說明

此代碼工作正常,但我試圖以三種不同的顏色顯示該圖以區分 3 種不同的物種。 我把代碼改成這樣:

total_rows = iris.count
number_of_iris = len(iris)

sepalLengths = iris["SepalLengthCm"]
sepalWidths = iris["SepalWidthCm"]

petalLengths = iris["PetalLengthCm"]
petalWidths = iris["PetalWidthCm"]

sns.FacetGrid(iris, hue="Species", size=10) \
   .map(range(number_of_iris),(sepalLengths/sepalWidths)) \
   .add_legend()

但收到錯誤:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-48-97e6cd0ab095> in <module>()
     10 petalWidths = iris["PetalWidthCm"]
     11 
---> 12 sns.FacetGrid(iris, hue="Species", size=10)    .map(range(number_of_iris),(sepalLengths/sepalWidths))    .add_legend()

我如何將每個物種繪制成不同的顏色?

一小部分數據是:

47,5.1,3.8, 1.34, 1.6,0.2, 8.0, Iris-setosa 
48,4.6,3.2, 1.44, 1.4,0.2, 7.0, Iris-setosa 
49,5.3,3.7, 1.43, 1.5,0.2, 7.5, Iris-setosa 
50,5.0,3.3, 1.52, 1.4,0.2, 7.0, Iris-setosa 
51,7.0,3.2, 2.19, 4.7,1.4, 3.36, Iris-versicolor 
52,6.4,3.2, 2.0, 4.5,1.5, 3.0, Iris-versicolor 
53,6.9,3.1, 2.23, 4.9,1.5, 3.27, Iris-versicolor 
54,5.5,2.3, 2.39, 4.0,1.3, 3.08, Iris-versicolor 

Seaborn 為在 DataFrame 中組織的數據提供了一個接口。 如果您想使用 seaborn,將您的數據保存在 DataFrame 中是有意義的,可能會添加您想要繪制的列。

import matplotlib.pyplot as plt
import seaborn as sns
iris = sns.load_dataset("iris")
iris["ID"] = iris.index
iris["ratio"] = iris["sepal_length"]/iris["sepal_width"]

sns.lmplot(x="ID", y="ratio", data=iris, hue="species", fit_reg=False, legend=False)

plt.legend()
plt.show()

在此處輸入圖片說明

使用通常的 matplotlib 散點圖也可以實現相同的效果,如下所示:

import matplotlib.pyplot as plt
import seaborn as sns
iris = sns.load_dataset("iris")

ratio = iris["sepal_length"]/iris["sepal_width"]

for name, group in iris.groupby("species"):
    plt.scatter(group.index, ratio[group.index], label=name)

plt.legend()
plt.show()

我們還可以使用 pyplot 模塊的 scatter 方法在 sklearn.preprocessing 模塊的幫助下繪制散點圖。

df=pd.read_csv(r'C:\Users\xyz\Desktop\Machine learning projects\iris.csv')
df.head()

現在我們將使用預處理模塊中的 labelencoder 將分類變量更改為編碼格式(0-1-2 同樣)。

from sklearn.preprocessing import LabelEncoder
encoding=LabelEncoder()
species_encoded=encoding.fit(df['Species']).transform(df['Species'])
species_encoded

現在我們將使用 plt.scatter() 方法繪制散點圖並傳遞必要的參數。

plt.scatter(df['SepalLengthCm'],df['SepalWidthCm'],alpha=0.4,s=100*df['PetalLengthCm'],cmap='viridis',c=species_encoded)

如圖所示:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM