2017-08-24 103 views
0

我正在學習Python中的數據分析,並使用matplotlib和seaborn庫,並在Kaggle中製作了一個Notebook。我試圖做一個散點圖,顯示萼片葉和花瓣葉的寬度和長度之間的比率。在scatterplot中爲虹膜數據集使用不同的顏色

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() 

輸出爲enter image description here

此代碼工作正確的,但我想在三種不同的顏色來顯示的情節來區分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 
+0

我想Facetgrid.map'你誤會了怎麼'工作。它期望一個*函數*作爲第一個參數。除此之外,還不清楚你在這裏想達到什麼樣的目標,你怎麼看待最後的情節?什麼應該在x軸和y軸上?你確定你不想要一個['lmplot'](https://seaborn.pydata.org/generated/seaborn.lmplot.html#seaborn.lmplot)? – ImportanceOfBeingErnest

+0

我想要一個這樣的情節[鏈接](http://imgur.com/a/oHxey),但每個物種都有不同的顏色。在這種情況下,ID 1至50必須具有顏色,51至100其他顏色和101至150第三顏色。 –

+0

http://seaborn.pydata.org/tutorial/axis_grids.html – mwaskom

回答

2

Seaborn提供到在DataFrames組織的數據的接口。如果你想使用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() 

enter image description here

同樣可以用通常的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() 
相關問題