在 Iris 数据集的散点图中使用不同的颜色
Use different colors in scatterplot for Iris dataset
我正在 Python 学习数据分析并使用 matplotlib 和 seaborn 库,我在 Kaggle 中制作了一个笔记本。我试图制作一个散点图,显示萼片叶和花瓣叶的宽度和长度之间的比率。
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 为在 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()
同样可以用通常的 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)
如图所示:
我正在 Python 学习数据分析并使用 matplotlib 和 seaborn 库,我在 Kaggle 中制作了一个笔记本。我试图制作一个散点图,显示萼片叶和花瓣叶的宽度和长度之间的比率。
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 为在 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()
同样可以用通常的 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)
如图所示: