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

2.2 简单figure图像生成案例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 使用import导入模块matplotlib.pyplot,并简写成plt 使用import导入模块numpy,并简写成np
from matplotlib import pyplot as plt
import numpy as np
import matplotlib

# 使用np.linspace定义x:范围是(-1,1);个数是50
x = np.linspace(-1, 1, 50)
# 函数y=x^3
y = x ** 3
y1 = x ** 2
# 使用plt.figure定义一个图像窗口.num代表图像窗口编号,figsize表示窗口大小
plt.figure(num=3, figsize=(8, 5), )

# 使用plt.plot画(x ,y1)曲线,曲线的颜色属性(color)为红色;
# 曲线的宽度(linewidth)为1.0;曲线的类型(linestyle)为虚线. 使用plt.show显示图像

plt.plot(x, y1, color='red', linewidth='1.0', linestyle='--')
# 使用plt.plot画(x ,y1)曲线.
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设置x坐标轴范围:(-2, 2)
plt.xlim((-2,2))
# 使用plt.ylim设置x坐标轴范围:(-2, 2)
plt.ylim((-2,2))
# 定义x轴名称
plt.xlabel('x轴')
# 定义y轴名称
plt.ylabel('y轴')

new_ticks = np.linspace(-2, 2, 5)
print(new_ticks)
# 使用plt.xticks设置x轴刻度:范围是(-2,2);个数是8.
plt.xticks(new_ticks)

# 使用plt.yticks设置y轴刻度以及名称:刻度为[-2, -1.8, -1, 1.22, 3]
# 对应刻度的名称为[‘really bad’,’bad’,’normal’,’good’, ‘really good’]
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
# set line syles
l1, = plt.plot(x, y1, label='linear line')
l2, = plt.plot(x, y2, color='red', linewidth=1.0, linestyle='--', label='square line')
# legend将要显示的信息来自于上面代码中的 label(表示图例的名称). 所以我们只需要简单写下一下代码, plt 就能自动的为我们添加图例.
# 图例展示
plt.legend(loc='upper right') # loc属性表示图例放置位置:upper,right,bottom,left

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)
# set dot styles
plt.scatter([x0, ], [y0, ], s=50, color='b')

# 注释annotate,对(x0,y0)这个点进行标注
plt.annotate(r'$x**2=%s$' % x0, xy=(x0, y0), xycoords='data', xytext=(+10, -10),
# xytext=(+10, -10) 和 textcoords='offset points' 对于标注位置的描述 和 xy 偏差值
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 plt
import numpy as np

# 规则图形:

# 创建一个图形窗口
plt.figure()
# subplot(m,n,x):代表创建m*n个小图,x代表第i个图
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)表示将整个图像窗口分为2行2列, 当前位置为2
plt.subplot(2, 2, 2)
data = np.arange(1, 4, .25)
plt.scatter(data, data)

# plt.subplot(2,2,3)表示将整个图像窗口分为2行2列,当前位置为3
plt.subplot(223)
plt.plot([0, 1], [0, 3])

# plt.subplot(2,2,4)表示将整个图像窗口分为2行2列,当前位置为4
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 plt
import numpy as np
#创建带数字标签的直方图
numbers = list(range(1,11))
#np.array()将列表转换为存储单一数据类型的多维数组
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):
# 用%.2f保留两位小数,横向居中对齐ha='center',纵向底部(顶部)对齐va='bottom'
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 柱形图


 评论

联系我 | Contact with me

Copyright © 2019-2020 谁知你知我,我知你知深。此恨经年深,比情度日久

博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议