目录
- 一、实验目的
- 二、实验内容
- 1. 获取鸢尾花数据第⼀个维度的所有数据,绘制单一箱线图。
- 2. 绘制鸢尾花数据任意一条数据的条形图,横坐标为属性名(利用iris_data.feature_names可以显示属性名称),纵坐标单位cm,图名为鸢尾花数据条形图。
- 3. 绘制饼状图,给定四个属性:优秀,良好,及格,不及格;四个数据分别占比:15,45,30,10. 要求:在图上标注出数值和属性名,弹出良好的部分,(explode)
- 4. 绘制折线图:随机生成数据,给定任意一个函数绘制折线图。
- 5. 绘制直方图:取出鸢尾花数据第二个属性的所有值绘制直方图,横坐标 bins=10。
- 6. 取出鸢尾花数据的第二和第三个属性的所有值,绘制散点图,横坐标为第二列的属性,纵坐标为
- 7. 绘制词云:找一段中文文本,保存为txt文件,测试如下代码:
- 8. 利用numpy,计算属性距离:取出鸢尾花数据中的第一条和第二条样本数据,计算欧氏距离、曼哈顿距离和明可夫斯基距离(对明可夫斯基距离分别计算p1,2,3,4时的情况)
一、实验目的
- 熟练掌握扩展库matplotlib及其依赖库的安装
- 了解matplotlib的绘图一般过程
- 熟练掌握折线图的绘制与属性设置
- 熟练掌握散点图的绘制与属性设置
- 熟练掌握柱状图的绘制与属性设置
- 熟练掌握饼状图的绘制与属性设置
- 熟练掌握图例属性的设置
- 了解保存绘图结果的方法
二、实验内容
1. 获取鸢尾花数据第⼀个维度的所有数据,绘制单一箱线图。
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.datasets import load_iris
plt.rcParams['font.family'] = ['SimHei']
iris_data = load_iris()
data = iris_data.data # 加载数据
data_1 = data[:, 0] # 第一维数据
df = pd.DataFrame(data_1)
df.boxplot()
plt.title("第1个维度的所有数据,绘制单一箱线图。")
plt.show()
2. 绘制鸢尾花数据任意一条数据的条形图,横坐标为属性名(利用iris_data.feature_names可以显示属性名称),纵坐标单位cm,图名为鸢尾花数据条形图。
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = ['SimHei']
# 加载鸢尾花数据集
iris_data = load_iris()
feature_names = iris_data.feature_names # 特征名称
# 假设选取数据集中的第一条数据进行可视化
sample_data = iris_data.data[0]
# 绘制条形图
plt.figure(figsize=(10, 5))
plt.bar(feature_names, sample_data, width=0.7)
plt.xlabel('属性名')
plt.ylabel('属性值(cm)')
plt.title('鸢尾花数据条形图 - 单一样本属性值')
# 显示图形
plt.show()
3. 绘制饼状图,给定四个属性:优秀,良好,及格,不及格;四个数据分别占比:15,45,30,10. 要求:在图上标注出数值和属性名,弹出良好的部分,(explode)
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = ['SimHei']
plt.figure(figsize=(7, 7))
ax=plt.axes([0.1,0.1,0.8,0.8])#建立轴的大小
labels='优秀','良好','及格','不及格'
x=[15,45,30,10]
explode=(0, 0.07, 0, 0)#这个是控制分离的距离的,
plt.pie(x,labels=labels,
explode=explode,
startangle=60,
autopct ='%1.1f%%')
plt.title('饼状图')
plt.show()
4. 绘制折线图:随机生成数据,给定任意一个函数绘制折线图。
import numpy as np
import random
import matplotlib.pyplot as plt
import pandas as pd
plt.rcParams['font.family'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 在1-50中随机选取20个不同的数
x1 = random.sample(range(1, 50), 20)
x1.sort()
plt.plot(x1, np.sin(x1))
plt.show()
5. 绘制直方图:取出鸢尾花数据第二个属性的所有值绘制直方图,横坐标 bins=10。
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = ['SimHei']
# 加载鸢尾花数据集
iris_data = load_iris()
data_1 = iris_data.data[:, 1] # 取出第二个属性
plt.hist(data_1, bins=10, edgecolor='black')
plt.ylabel('频数')
plt.title('鸢尾花数据第二个属性的直方图')
plt.show()
6. 取出鸢尾花数据的第二和第三个属性的所有值,绘制散点图,横坐标为第二列的属性,纵坐标为
第三个属性。
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = ['SimHei']
fig, ax = plt.subplots()
# 加载鸢尾花数据集
iris_data = load_iris()
data_1 = iris_data.data[:, 1] # 第二列
data_2 = iris_data.data[:, 2] # 第三列
ax.scatter(data_1, data_2, c="blue", alpha=0.5)
ax.grid(True)
# 设置坐标轴标签
plt.xlabel('花萼宽度 (cm)')
plt.ylabel('花瓣长度 (cm)')
plt.show()
7. 绘制词云:找一段中文文本,保存为txt文件,测试如下代码:
import jieba
from wordcloud import WordCloud
import numpy as np
import PIL
import os
def chinese_jieba(txt):
wordlist_jieba = jieba.cut(txt) # 将⽂本分割,返回列表
txt_jieba = " ".join(wordlist_jieba) # 将列表拼接为以空格为间断的字符串
return txt_jieba
stopwords = {'这些':0, '那些':0, '因为':0, '所以':0} #根据文本,可以自己增加,形式为 '词':0
alice_mask = np.array(PIL.Image.open('../../../Pictures/bizhi/ce329083a43b4526ac6129f8c651bae5.jpg'))
with open('./文本.txt', encoding='utf8') as fp:
txt = fp.read()
cutted_text = chinese_jieba(txt)
wordcloud = WordCloud(font_path = r'C:\Windows\Fonts\STKAITI.TTF', # 字
background_color = 'black', # 背景⾊
max_words = 180, # 最⼤显示单词数
max_font_size = 270, # 频率最⼤单词字体⼤⼩
mask = alice_mask,
stopwords = stopwords # 过滤停⽤词
).generate(cutted_text)
image = wordcloud.to_image()
image.show()
8. 利用numpy,计算属性距离:取出鸢尾花数据中的第一条和第二条样本数据,计算欧氏距离、曼哈顿距离和明可夫斯基距离(对明可夫斯基距离分别计算p1,2,3,4时的情况)
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = ['SimHei']
# 加载鸢尾花数据集
iris_data = load_iris()
sample1 = iris_data.data[0]
sample2 = iris_data.data[1]
# 定义计算距离的函数
def euclidean_distance(vec1, vec2):
return np.linalg.norm(vec1 - vec2) # l2范数
def manhattan_distance(vec1, vec2):
return np.sum(np.abs(vec1 - vec2))
def minkowski_distance(vec1, vec2, p):
return np.power(np.sum(np.abs(vec1 - vec2)**p), 1/p)
# 计算欧氏距离
print("欧氏距离 :{:.4f}".format(euclidean_distance(sample1, sample2)))
# 计算曼哈顿距离
print("曼哈顿距离:{:.4f}".format(manhattan_distance(sample1, sample2)))
# 计算不同 p 值下的明可夫斯基距离
for p in [1, 2, 3, 4]:
print("明可夫斯基距离 (p={}):{:.4f}"
.format(p, minkowski_distance(sample1, sample2, p)))