Python matplotlib库基本二维绘图
程序员文章站
2022-07-21 11:28:31
pyplot、plot()、axis()、xlim()、ylim()、xticks()、yticks()、xlable()、ylable()、legend()、text()、title()、bar()、scatter()、pie()、subplot()、中文显示问题...
这次的情况与以往不同,因为要保存许多图片,所以加了一个接合路径的函数
左右拆分后,就可以很直观的展示某一段代码对应的图。
有一些函数的参数不是很完整(主要列出了重要,必要的参数),如果想深入了解此函数的功能,点击函数,按下快捷键F12(基于VS Code)即可查看源文件。
比如你想深入了解下subplot()函数,可以看官方的解释和例子。
言回正传
复制以下的代码,选择运行的函数,验证有关二维绘图的操作。
相关参考:Python语言程序设计(上海交通大学出版社 赵璐主编)<<----传送门
原谅我没有找到电子版,不然一定爬下来
import matplotlib.pyplot as plt
import matplotlib
import numpy as np
import sys
import os
def getFile_path(filename):
'''
无论用的是什么系统,当前工作目录是哪个文件夹
都能准确获取源代码同级目录下的文件完整路径
'''
workpath = os.path.split(sys.argv[0])[0]
return os.path.join(workpath, filename)
# 演示-----------------------------------------------------------------------------------------------
def demo(filepath):
"""
以下仅为简单的展示,具体函数功能在相关测试函数中介绍
"""
# 设置中文字体为黑体
matplotlib.rcParams['font.family'] = ['SimHei']
# 设置负号显示正常
matplotlib.rcParams['axes.unicode_minus'] = False
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)
plt.plot(x, y, 'r')
f1 = plt.figure(1)
plt.title('我是标题')
plt.xlabel('我是x轴标签')
plt.ylabel('我是y轴标签')
plt.text(np.pi, 0.6, '我是图文字')
plt.ylim(-2, 2)
plt.legend(labels=['我是图例'])
plt.savefig(filepath+'y=sin(x).png') # 保存图片
plt.cla() # 清除figure中活动的axes
# plot函数的相关测试--------------------------------------------------------------------------------------
def pyplot_test(filepath):
"""
plot(x,y,s,linewidth) 在二维直角坐标系中绘制直线、曲线、离散的点,返回一个列表对象
x:横坐标轴的取值范围,可选。省略时默认用y数据集的索引作为x
y:与x对应的纵坐标轴的取值范围,必选。
s:控制线型的格式字符串,可选。省略时采用默认格式
linewidth:线的宽度
"""
plt.plot([1, 2, 3]) # 绘制直线 y=x+1
plt.savefig(filepath+'y=x+1.png')
plt.cla()
# 通过设置线型的格式字符串来控制点线的颜色、风格
x = y = np.arange(10)
plt.plot(x, y, 'r*:')
plt.savefig(filepath+'y=x')
plt.cla()
# plot还支持一次性绘制多个图形
x = np.arange(10)
y1 = x
y2 = 2*x
y3 = 3*x
plt.plot(x, y1, 'ro--', x, y2, 'gv:', x, y3, 'bs-')
plt.savefig(filepath+'三条线.png')
plt.cla()
# pyplot属性测试---------------------------------------------------------------------------------------
def pyplot_attribute(filepath):
x = np.arange(10)
y1 = x
y2 = 2*x
y3 = 3*x
plt.plot(x, y1, 'ro--', x, y2, 'gv:', x, y3, 'bs-')
plt.axis('scaled') # 设置x轴y轴按实际比例显示
plt.xlim(0, 10) # 设置x轴的区间
plt.ylim(0, 30) # 设置y轴的区间
xmin, xmax, ymin, ymax = plt.axis() # 获取当前x轴和y轴的区间值
print('x轴[{},{}]y轴[{},{}]'.format(xmin, xmax, ymin, ymax))
plt.xticks([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
plt.yticks([5, 10, 15, 20, 25, 30],
['a', 'b', 'c', 'd', 'e', 'f']) # 'a'与5对应,'b'与10对应
y_ticks, labels = plt.yticks() # 返回y轴刻度值和对应标签
print(y_ticks)
print(type(labels))
for label in labels: # 输出y轴的刻度标签
print(label)
plt.xlabel('x-axis') # 设置x轴标签
plt.ylabel('y-axis') # 设置y轴标签
plt.legend(['y1=x', 'y2=2x', 'y3=3x']) # 添加图例
plt.text(4, 2, 'TEXT') # 转换成你想要的显示文本
plt.savefig(filepath+'三条带属性的线.png')
plt.cla()
# 绘图函数测试-------------------------------------------------------------------------------------------
def drawing_test(filepath):
"""
boxplot() 箱型图
bar() 竖向条形图
barh() 横向条形图
contour() 等高线
hist() 直方图
pie() 饼图
plot_date() 包含日期型数据的图
polar() 极坐标图
psd() 功率谱密度图
scatter() 散点图
specgram() 频谱图
stem() 火柴杆图
step() 步阶图
"""
# bar(x,height) x:x轴对应的值,height:与x对应的高度值
x = np.arange(7)
height = [3, 4, 7, 6, 2, 8, 9]
plt.bar(x, height)
plt.savefig(filepath+'横向条形图.png')
plt.cla()
# scatter(x,y)
plt.scatter(x, height)
plt.savefig(filepath+'散点图')
plt.cla()
# pie(x,explode=None,lables=None,autopct=None,shadow=False)
# x:需要绘制饼图的数据集
# explode:设置饼块分离,默认为空(不分离),非0值将分离
# lables:设置饼块对应标签,默认为空
# autopct:设置饼块显示占比值,默认为空
# shadow:设置饼图是否有阴影,即立体效果,默认为False(即饼图是一个平面)
Lables = 'Class-A', 'Class-B', 'Class-C', 'Class-D' # 饼块标签
data = [15, 30, 45, 10]
Explode = (0, 0.1, 0, 0)
plt.pie(data, explode=Explode, labels=Lables, autopct='%.2f%%')
plt.savefig(filepath+'饼图.png')
plt.cla()
# subplot(),绘制子图-----------------------------------------------------------------------------------
def subplot_test(filepath):
"""
在一个区域绘制多个不重叠的图形
subplot(nrows,ncols,index):在绘图区域创建子绘图区域
nrows:将绘图区分割成nrows行
ncols:将绘图区分割成ncols列
index:指定当前子绘图区域的索引
子区索引按照行优先顺序,从1开始编号,步长为1,依次递增
"""
plt.subplot(2, 2, 1)
plt.bar(range(7), [3, 4, 7, 6, 2, 8, 9])
plt.subplot(2, 2, 2)
plt.plot(range(7), [3, 4, 7, 6, 2, 8, 9])
plt.subplot(2, 2, 3)
plt.scatter(range(7), [3, 4, 7, 6, 2, 8, 9])
plt.subplot(2, 2, 4)
plt.barh(range(7), [3, 4, 7, 6, 2, 8, 9])
plt.savefig(filepath+'绘制子图.png')
plt.cla()
# 中文显示问题-------------------------------------------------------------------------------------------
def chinese_test(filepath):
"""
默认状态下,matplotlib库无法在图表中正常显示中文
需要使用系统字体,修改matplotlib库中rcParams参数字典的'font.family'键对应的值
常见的系统字体:
'Simhei' 黑体
'Kaiti' 楷体
'Microsoft YaHei' 微软雅黑
......
"""
matplotlib.rcParams['font.family'] = 'Kaiti'
plt.plot([1, 2, 4], [1, 2, 3])
plt.title('坐标系标题')
plt.xlabel('时间(s)')
plt.ylabel('范围(m)')
plt.savefig(filepath+'中文显示.png')
plt.cla()
# 还可以单独指定某一部分的字体,在函数中传递一个中文字体给参数fontproperties
plt.plot([1, 2, 4], [1, 2, 3])
plt.title('坐标系标题', fontproperties='Simhei')
plt.xlabel('时间(s)', fontproperties='Kaiti')
plt.ylabel('范围(m)', fontproperties='Microsoft YaHei')
plt.savefig(filepath+'多种字体.png')
# 选择要验证的函数-----------------------------------------------------------------------------------------
def main():
file_name = 'image\\'
file_path = getFile_path(file_name)
# demo(file_path)
# pyplot_test(file_path)
# pyplot_attribute(file_path)
# drawing_test(file_path)
# subplot_test(file_path)
# chinese_test(file_path)
if __name__ == "__main__":
main()
相关参考:Python语言程序设计(上海交通大学出版社 赵璐主编)<<----传送门
如有错误,欢迎私信纠正
技术永无止境,谢谢支持!
本文地址:https://blog.csdn.net/pineapple_C/article/details/107128060
上一篇: 响应式企业网站有哪些优势?
下一篇: python设计模式之命令模式