Python学习DAY3(下)|Python中的Matplotlib库

本笔记摘录清华大学工业工程系朱成礼老师的python教案与授课内容,并在此基础上进行实操性的拓展,希望能对大家有所帮助。

一、matplotlib的逻辑结构与绘图流程 

1、matplotlib的逻辑结构

在图画中,图像的不同元素之间是有层次关系的。在matplotlib上,我们把图像放在坐标系下,这样就形成了一个位置关系,所以matplotlib中有figures和axes对象。以一个图片的绘制过程为例:

 将对象的生成过程记录下来并翻译成代码,这就是matplotlib的使用方法。

 2、matplotlib的绘图流程

step1:创建绘图对象

import matplotlib as plt
# 创建绘图对象,创建子图对象
a = plt.figure()  # 返回figure对象
b = plt.axes()  # 添加子图,返回子图对象
c = plt.subplot()  # 返回子图对象
d = plt.subplots()  # 返回该figure和axes对象嵌套列表,默认最后一个子图为“当前”图

step2:绘制图表,根据输入数据绘图

plt.plot()  # 折线图或点图
plt.scatter()  # 散点图
plt.bar()  # 条形图或柱状图
plt.hist()  # 绘制直方图
plt.pie()  # 绘制饼图
plt.box()  # 绘制箱线图
plt.imshow()  # 根据像素点数据完成绘图并显示

step3:配置图例,添加图例元素

plt.title()  # 设置标题
plt.axis/xlim/ylim()  # 坐标轴范围
plt.grid()  # 设置网格线
• legend(),添加图例
• xlabel/ylabel(),轴标题
• xticks/yticks(),轴刻度
• text/arrow/annotation(),指定位置添加文字、箭头和标记

不行写不动了写不动了写不动了,放几个案例大家自己感受一下吧!我要去学pandas了

import numpy as np
import matplotlib.pyplot as plt

# 由于我的python无法显示中文字体,因此我在Matplotlib文件中添加了SimHei语言包
# 因此,所有需要Matpolib画图显示文字的操作中,我都加入了下面的代码
plt.rcParams['font.sans-serif'] = ['SimHei']

x = np.arange(-2 * np.pi, 2 * np.pi, 0.01)

y1 = np.sin(2 * x) / x
y2 = np.sin(3 * x) / x

plt.figure(figsize=(8, 6))
plt.plot(x, y1, 'k-', label='sin2x/x')
plt.plot(x, y2, 'r-', label='sin3x/x')

# 设置坐标轴范围
plt.xlim(-2 * np.pi - 0.5, 2 * np.pi + 0.5)
plt.ylim(-1, 4)

# 设置x轴的刻度值
plt.xticks([-2 * np.pi, -np.pi, 0, np.pi, 2 * np.pi],
           ['-2π', '-π', '0', 'π', '2π'])

# 设置x轴label
plt.xlabel('弧度')
plt.ylabel('正弦')
plt.title('线形图')

plt.legend()  # 添加图例
plt.grid(linestyle='--')  # 添加网格线
plt.savefig('exercise5-1.jpg')  # 保存图形文件
plt.show()
# 食用numpy加载文本数据文件
import numpy as np
import matplotlib.pyplot as plt

# 由于我的python无法显示中文字体,因此我在Matplotlib文件中添加了SimHei语言包
# 因此,所有需要Matpolib画图显示文字的操作中,我都加入了下面的代码
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['font.size'] = 10
arr = np.loadtxt('iris_scatter.csv', dtype=float, delimiter=',')

# 选取第1-4列数据,分别绘制直方图,直方图条形个数为30,
arr_1 = arr[:, 0]
arr_2 = arr[:, 1]
arr_3 = arr[:, 2]
arr_4 = arr[:, 3]

# 修改子图间距
plt.subplots_adjust(top=0.92, bottom=0.1,
                    left=0.12, right=0.95,
                    hspace=0.55, wspace=0.35)

# 绘制第一个子图
plt.subplot(221)
plt.title('花萼长度直方图')  # 设置标题
plt.xlabel('花萼长度')  # 设置x轴标签
plt.ylabel('频数')  # 设置y轴标签
plt.grid(linestyle='--')  # 添加网格线
n1, bins1, patches1 = plt.hist(arr_1, bins=30)

# 绘制第二个子图
plt.subplot(222)
plt.title('花萼宽度直方图')  # 设置标题
plt.xlabel('花萼宽度')  # 设置x轴标签
plt.ylabel('频数')  # 设置y轴标签
plt.grid(linestyle='--')  # 添加网格线
n2, bins2, patches2 = plt.hist(arr_2, bins=30)

# 绘制第三个子图
plt.subplot(223)
plt.title('花瓣长度直方图')  # 设置标题
plt.xlabel('花瓣长度')  # 设置x轴标签
plt.ylabel('频数')  # 设置y轴标签
plt.grid(linestyle='--')  # 添加网格线
n3, bins3, patches3 = plt.hist(arr_3, bins=30)

# 绘制第四个子图
plt.subplot(224)
plt.title('花瓣宽度直方图')  # 设置标题
plt.xlabel('花瓣宽度')  # 设置x轴标签
plt.ylabel('频数')  # 设置y轴标签
n4, bins4, patches4 = plt.hist(arr_4, bins=30)

# 整体进行添加图例和网格线
plt.legend(loc='upper center', bbox_to_anchor=(-1.5, -0.04), ncol=5, labels='频率')  # 添加图例
plt.grid(linestyle='--')  # 添加网格线
plt.savefig('exercise5-2.png')  # 保存图形文件(exercise5-2.png)到硬盘,并显示图片
plt.show()

# 输出hist()函数返回的直方图向量n和各个bin的区间范围
print(f'函数返回的第1个子图的向量为:{n1}')
print(f'函数返回的第2个子图的向量为:{n2}')
print(f'函数返回的第3个子图的向量为:{n3}')
print(f'函数返回的第4个子图的向量为:{n4}')
print(f'各个bin的区间范围都是:{bins1}')
import matplotlib.pyplot as plt

# 设置中文显示方式
plt.rcParams['font.sans-serif'] = ['SimHei']

# 设置轴标签与尺度
x_values = [0, 1, 2, 3, 4]
x_tickes = ['中国', '美国', '俄罗斯', '法国', '英国']
gdp_values = [17.73, 23.03, 1.78, 2.94, 3.19]

plt.bar(x_values, gdp_values, align='center', color='purple')
plt.ylabel('GDP(万亿美元)')
plt.title('部分国家2021年GDP数据')
plt.xticks(x_values, x_tickes)

# 在条形图上方显示数字
for x, y in enumerate(gdp_values):
    # ha='center'表示居中对齐
    plt.text(x, y + 0.3, '%.1f' % round(y, 1), ha='center')
plt.savefig('exercise5-3.jpg')  # 保存图形文件

# 输出条形图
plt.show()
# 使用numpy加载文本数据文件“iris_scatter.csv”
import numpy as np
import matplotlib.pyplot as plt

arr = np.loadtxt('iris_scatter.csv', dtype=float, delimiter=',')

# 设置中文显示方式
plt.rcParams['font.sans-serif'] = ['SimHei']

# 选取第3列(花瓣长度)为x轴数据,第4列(花瓣宽度)为y轴数据,绘制散点图
# 设置点的格式为“4”,颜色为红色“r“
arr_3 = arr[:, 2]
arr_4 = arr[:, 3]
plt.scatter(arr_3, arr_4, c='r', marker='4')

# 设置图形标题,x轴和y轴的标签
plt.title('花瓣长度与宽度的关系')
plt.xlabel('花瓣长度')
plt.ylabel('花瓣宽度')

# 输出散点图
plt.grid(linestyle='--')  # 添加网格线
plt.show()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值