Matplotlib 是 Python 的绘图库。 它可与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案。 它也可以和图形工具包一起使用,如 PyQt 和 wxPython。!
本文要点: struct模块 科学运算基本三大库Matplotlib 图形
1.import struct库 1.1 struct模块:
在Python中,『一切皆对象』,基本数据类型也不列外 C语言的数组int a[3] = {1, 2, 4};存储的是真正的值 Python的列表list = [1, 2, 4],存储的是元素的指针
1.2 pack(),unpack()函数:
struct模块最重要的两个函数就是pack()、unpack()方法:打包函数:pack(fmt, v1, v2, v3, …);解包函数:unpack(fmt, buffer),其中,fmt是格式字符(format的谐音),struct模块支持的格式化字符如下表
2.matplotlib库 在python的matplotlib库中分别可用bar、barh、plot函数来构建它们,再使用xticks与yticks(设置坐标轴刻度)、xlabel与ylabel(设置坐标轴标签)、title(标题)、legend(图例)、xlim与ylim(设置坐标轴数据范围)、grid(设置网格线)等命令来装饰图形
2.1导入库文件 from matplotlib import pyplot as plt import numpy as np
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 from matplotlib import pyplot as pltimport numpy as npimport matplotlibx = np.linspace(-1 , 1 , 50 ) y = x ** 3 y1 = x ** 2 plt.figure(num=3 , figsize=(8 , 5 ), ) plt.plot(x, y1, color='red' , linewidth='1.0' , linestyle='--' ) plt.plot(x, y) plt.show()
2.3坐标轴以及line:
设置坐标轴不同的名字、刻度以及范围:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 plt.xlim((-2 ,2 )) plt.ylim((-2 ,2 )) plt.xlabel('x轴' ) plt.ylabel('y轴' ) new_ticks = np.linspace(-2 , 2 , 5 ) print(new_ticks) plt.xticks(new_ticks) plt.yticks([-2 , -1.8 , -1 , 1.22 , 2 ],[r'$really\ bad$' , r'$bad$' , r'$normal$' , r'$good$' , r'$really\ good$' ])
坐标轴移至中心:
1 2 3 4 5 6 7 8 9 10 11 12 13 """ plt.gca获取当前坐标轴信息. 使用.spines设置边框;使用.set_color设置边框颜色 """ ax = plt.gca() ax.spines['top' ].set_color('none' ) ax.spines['right' ].set_color('none' ) ax.xaxis.set_ticks_position('bottom' ) ax.spines['bottom' ].set_position(('data' , 0 )) ax.yaxis.set_ticks_position('left' ) ax.spines['left' ].set_position(('data' ,0 ))
图例legend
1 2 3 4 5 6 l1, = plt.plot(x, y1, label='linear line' ) l2, = plt.plot(x, y2, color='red' , linewidth=1.0 , linestyle='--' , label='square line' ) plt.legend(loc='upper right' )
annotate标注
1 2 3 4 5 6 7 8 9 10 11 12 x0 = 0.5 y0 = x0**2 plt.plot([x0, x0,], [0 , y0,], 'k--' , linewidth=2.5 ) plt.scatter([x0, ], [y0, ], s=50 , color='b' ) plt.annotate(r'$x**2=%s$' % x0, xy=(x0, y0), xycoords='data' , xytext=(+10 , -10 ), textcoords='offset points' , fontsize=10 , arrowprops=dict(arrowstyle='->' , connectionstyle="arc3,rad=.2" ))
matplotlib的颜色及线条控制(linestyle,color)
linestyle:
1 2 3 4 5 '-' solid line style '--' dashed line style '-.' dash-dot line style ':' dotted line styl
color:【参考此篇文章】
多图分区展示
语法格式:subplot(a,b,c)表示a行,b列,第c个图像区域
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 from matplotlib import pyplot as pltimport numpy as npplt.figure() plt.subplot(2 , 2 , 1 ) x = [1 , 2 , 3 , 4 , 5 , 6 ] y = [3 , 5 , 7 , 8 , 1 , 2 ] plt.plot(x, y) plt.subplot(2 , 2 , 2 ) data = np.arange(1 , 4 , .25 ) plt.scatter(data, data) plt.subplot(223 ) plt.plot([0 , 1 ], [0 , 3 ]) plt.subplot(2 , 2 , 4 ) plt.plot([0 , 1 ], [3 , 3 ]) plt.show()
plt.text()给图形添加数据标签
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 import matplotlib.pyplot as pltimport numpy as npnumbers = list(range(1 ,11 )) x = np.array(numbers) y = np.array([a**2 for a in numbers]) plt.bar(x,y,width=0.5 ,align='center' ,color='c' ) plt.title('Square Numbers' ,fontsize=24 ) plt.xlabel('Value' ,fontsize=14 ) plt.ylabel('Square of Value' ,fontsize=14 ) plt.tick_params(axis='both' ,labelsize=14 ) plt.axis([0 ,11 ,0 ,110 ]) for a,b in zip(x,y): plt.text(a,b+0.1 ,'%.2f' %b,ha = 'center' ,va = 'bottom' ,fontsize=7 ) plt.savefig('images\squares.png' ) plt.show()
首先,前边设置的x、y值其实就代表了不同柱子在图形中的位置(坐标),通过for循环找到每一个x、y值的相应坐标——a、b,再使用plt.text在对应位置添文字说明来生成相应的数字标签,而for循环也保证了每一个柱子都有标签。其中,a+0.5, b+0.05(表示位置高度)表示在每一柱子对应x值、y值上方0.05处标注文字说明,'%.2f’ % b,代表标注的文字,即每个柱子对应的y值 ,其中0表示不显示小数后面的数值,1就表示显示小数后面一位,以此类推; ha=’center’, va= ‘bottom’代表horizontalalignment(水平对齐)、verticalalignment(垂直对齐)的方式,fontsize则是文字大小。条形图、折线图也是如此设置,饼图则在pie命令中有数据标签的对应参数。对于累积柱状图、双轴柱状图则需要用两个for循环,同时通过a与b的不同加减来设置数据标签位置。
3.图形 未完待续: -3.1 散点图 -3.2 柱形图