基本统计图绘制

一、实验目的

  1. 熟练掌握扩展库matplotlib及其依赖库的安装
  2. 了解matplotlib的绘图一般过程
  3. 熟练掌握折线图的绘制与属性设置
  4. 熟练掌握散点图的绘制与属性设置
  5. 熟练掌握柱状图的绘制与属性设置
  6. 熟练掌握饼状图的绘制与属性设置
  7. 熟练掌握图例属性的设置
  8. 了解保存绘图结果的方法

二、实验内容

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

在这里插入图片描述

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值