1.实验目的
掌握 Matplotlib 数据可视化的常用方法。
2.实验内容
1. 绘制鸢尾花数据集的特征分布图
说明:鸢尾花是单子叶百合目花卉,是一种比较常见的花,鸢尾花的品种较多。 鸢尾花数据集最初由 Edgar Anderson 测量得到,而后在著名的统计学家和生物学
家 R.A Fisher 于 1936 年发表的文章中被使用。它是一个很小的数据集,仅有 150 行,5
列。该数据集的四个特征属性的取值都是数值型的,他们具有相同的量纲,不需要做 任何标准化的处理,第五列为通过前面四列所确定的鸢尾花所属的类别名称。
鸢尾花数据集有 4 个属性列和一个品种类别列:sepal length(萼片长度)、sepal width(萼片宽度)、petal length(花瓣长度)、petal width (花瓣宽度),单位都是 厘米。3 个品种类别是 Setosa、Versicolour、Virginica,样本数量 150 个,每类 50 个。
(1)使用 pandas.read_csv()函数读取“iris.csv”。 操作提示:
数据没有标题,设置参数 header=None。同时手动设置标题,如:df.columns = ['sepalLength','sepalWidth','petalLength','petalWidth','kind']。
图 5-1 鸢尾花数据集
#使用pandas.read_csv()函数读取iris.csv
import pandas as pd
df = pd.read_csv(r'D:\iris.csv',header=None)
df.columns = ['sepalLength','sepalWidth','petalLength','petalWidth','kind']
print(df)
(2) 绘制包含两个子图的图表。
先绘制第一幅子图,显示花瓣宽度和花萼宽度的对比散点图;再绘制第二幅子
图,显示花瓣宽度的条形图。完成效果如图 5-2 所示。
操作提示:
条形图的 X 轴上的数值数量与鸢尾花数据集的样本数量保存一致。
图 5-2 鸢尾花图表
#绘制包含两个子图的图表,第一幅子图,显示花瓣宽度和花萼宽度的对比散点图,第二幅子图,显示花瓣宽度的条形图
import matplotlib.pyplot as plt
plt.scatter(df['sepalWidth'],df['petalWidth'])
plt.xlabel('sepalWidth')
plt.ylabel('petalWidth')
plt.title('花萼/花瓣宽度散点图')
plt.show()
# 为了条形图,我们需要创建一个与样本数量一致的索引序列
index = range(len(df['petalWidth']))
plt.bar(index,df['petalWidth'])
plt.xlabel('index')
plt.ylabel('petalWidth')
plt.title('花萼/花瓣宽度条形图')
plt.show()
2. 多个图表的绘制
生成 0 到 10、间隔 0.1 的数值序列作为 x,绘制如下图所示的图表,各子图的内容 分别为:
第一幅子图:计算对应的 cos(x)函数值,根据数值和 cos 值绘制曲线图。 第二幅子图:绘制 y=2x、y=3x、y=4x 的直线组。
第三幅子图:以数值序列作为横轴,100 以内的随机作为纵轴,绘制绿色、“+”号 的散点图。
第四幅子图:绘制 y=sin(x)*ex/100 的曲线。
#生成 0 到 10、间隔 0.1 的数值序列作为 x,绘制如下图所示的图表,各子图的内容 分别为:第一幅子图:计算对应的 cos(x)函数值,根据数值和 cos 值绘制曲线图。 第二幅子图:绘制 y=2x、y=3x、y=4x 的直线组。第三幅子图:以数值序列作为横轴,100 以内的随机作为纵轴,绘制绿色、“+”号 的散点图。第四幅子图:绘制 y=sin(x)*ex/100 的曲线。
import numpy as np
import matplotlib.pyplot as plt# 生成0到10、间隔0.1的数值序列
x = np.arange(0, 10.1, 0.1)# 第一幅子图:计算cos(x)并绘制曲线图
plt.subplot(4, 1, 1) # 4行1列的子图,当前是第1个子图
plt.plot(x, np.cos(x))
plt.title('y = cos(x)')
plt.xlabel('x')
plt.ylabel('y')# 第二幅子图:绘制y=2x, y=3x, y=4x的直线组
plt.subplot(4, 1, 2) # 4行1列的子图,当前是第2个子图
for slope in [2, 3, 4]:plt.plot(x, slope * x, label=f'y={slope}x')
plt.title('y = mx Lines')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()# 第三幅子图:以数值序列作为横轴,100以内的随机数作为纵轴,绘制绿色、“+”号的散点图
plt.subplot(4, 1, 3) # 4行1列的子图,当前是第3个子图
y_random = np.random.rand(len(x)) * 100 # 生成100以内的随机数
plt.scatter(x, y_random, color='green', marker='+')
plt.title('Random Scatter Plot')
plt.xlabel('x')
plt.ylabel('y')# 第四幅子图:绘制y=sin(x)*exp(x)/100的曲线
plt.subplot(4, 1, 4) # 4行1列的子图,当前是第4个子图
y = np.sin(x) * np.exp(x) / 100
plt.plot(x, y)
plt.title('y = sin(x) * exp(x) / 100')
plt.xlabel('x')
plt.ylabel('y')# 调整子图间距并显示图表
plt.tight_layout()
plt.show()