python可视化------Matplotlib图形绘制

开篇

接上一篇python可视化——Matplotlib简单使用,这一篇我们来讲一讲如何使用Matplotlib库绘制一些常用的图形。

常用图形绘制

pyplot.bar条形图

条形图很简单,每个矩形表示一个离散数据的数量,可以方便我们直观的观察离散数据的数量。使用bar函数进行绘制。

1
2
3
4
5
6
7
8
#其中第一个列表表示每个矩形绘制时的起始位置,第二个参数表示矩形的高
#除此之外还有许多可选参数:
#width控制矩形宽度
#align可以控制矩形位于起始位置的中央,设置为center
#color设置颜色
#alpha设置透明度
plt.bar([1, 3, 5, 7, 9], [5, 4, 8, 12, 7] ,width=1,align='center',color='#342342')
plt.show()


通过pyplot.barh函数可以生成水平的条形图

1
2
3
#水平图
plt.barh([1, 3, 5, 7, 9], [5, 4, 8, 12, 7] ,align='center',color='#342342')
plt.show()

水平图

pyplot.bar极坐标图

是的,你没有看错,这个函数也可以画极坐标图,只不过要在图表上做点手脚,gca()函数可以获取我们当前使用的图表,我们将其polar属性设置为true就是极坐标系了。相对于直角坐标,极坐标有很多的特点,我们可以根据需求自己设置是否使用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#准备十个随机数据
N = 10
#将一个圆进行十等分
x= np.linspace(0.0, 2 * np.pi, N,endpoint=False)
#产生十个随机的高度
y= np.random.rand(N)
#设置随机的宽度
width = np.pi / 5 * y
#设置极坐标系
plt.gca(polar=True)
#使用bar函数绘制,参数是一样的
#x是极坐标的极角,y是极径
#其余参数与条形图相同
plt.bar(x, y, width=width,alpha=0.5)
plt.show()


当然也可以改成线条的风格

1
2
3
4
5
N = 1000
theta = np.linspace(0.0, 2 * np.pi, N,endpoint=False)
plt.gca(polar=True)
plt.plot(theta,theta*3)
plt.show()

pyplot.hist直方图

与条形图不同,直方图展示的是数据的分布情况,其横坐标会将取值分段,根据一定的间隔来计算间隔中有多少值来体现相关数值的频率分布。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#生成随机数据
x = 10 + 10 * np.random.randn(10000)
#绘制直方图,hist的参数有:
#x为传入的数据信息
#bins用于对取值进行间隔划分
#normed用于参数的归一化,true表示进行归一化,即将所有数据占的比例总和置为1,
#由于版本问题笔者的参数为density,使用normed会报错
#facecolor直方图的颜色
#alpha直方图的透明度
n, bins, patches = plt.hist(x, 100, density=1, facecolor='blue', alpha=0.7)
#函数返回了三个参数,分别是:
#n表示的是每个区间上数据的频数,即在这一区间上的数据有多少,以一个列表顺序表示
#bins表示的是区间的划分情况,共划分了100块,所以以101个数来记录划分的区间
#patches包含每个bin的所有数据,对应每个区间和每个区间的所有数据。
plt.show()

pyplot.scatter散点图

散点图描述了数据点在坐标系中的分布情况,由两组数据构成多个坐标点,使用scatter函数可以实现

1
2
3
4
5
6
7
8
9
10
11
12
#生成随机的数据点
x = 10 + 10 * np.random.randn(10000)
y = 10 + 10 * np.random.randn(10000)
#动态的设置颜色
color=x*y
#绘制散点图,scatter参数有:
#x,y分别是点集的横坐标与纵坐标集
#s是用来标识绘制出的点的大小
#c是用来设置点的颜色,可以根据点的位置来动态的设置
#alpha透明度在0~1之间
plt.scatter(x,y,s = 5, c = color, alpha = 0.5)
plt.show()


使用pyplot.plot()函数也可以实现

1
2
3
4
x = 10 + 10 * np.random.randn(10000)
y = 10 + 10 * np.random.randn(10000)
plt.plot(x,y,'.',alpha=0.7)
plt.show()

pyplot.plot 折线图

折线图的实现就简单的多,我们可以直接使用plot实现,只是在传参时要将横纵坐标写完整,还可以实现多个折线图的叠加。

1
2
3
4
5
6
x=np.linspace(0,100,100)
y1 = 10 + 10 * np.random.randn(100)
y2 = 10 + 10 * np.random.randn(100)
#对应的x与y要写完整
plt.plot(x,y1,x,y2,alpha=0.7)
plt.show()

pyplot.pie饼图

饼图可以表示一系列数据在数据整体中所占的比例,我们使用pie函数对其进行绘制。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#对应数据的标签
labels = ['A', 'B', 'C', 'D', 'E', 'F']
#相应的数据
X = [123, 242, 43, 345, 546, 3434]
#用于表示扇形相对于中心的位移
expl = [0,0,0,0,0,0.1]
#每个扇形的颜色
color=['b','g','r','y','k','#756532']
#绘制函数pie,其参数有:
#x为需要进行处理的数据
#labels每一块所需要展示的文字
#explode每一块相对于中心的位置
#shadow是与否显示阴影
#pctdistance显示的比例在圆中的位置
#autopct比例的数值位数,%.1f%%取一位小数
plt.pie(X, labels=labels,explode=expl,colors=color, autopct='%.1f%%',pctdistance=0.8,shadow=True)
plt.show()

图像标注

pyplot.text文字

使用这一函数我们可以在图像上进行相关数据的标注。

1
2
3
4
5
6
7
8
9
10
11
x=[1, 3, 5, 7, 9]
y1=[1, 7,3, 9, 5]
plt.bar(x, y1 ,align='center', color='#345345')
plt.xticks(x, x)
for i in range(len(y1)):
#text函数很简单,参数有:
#x,y所展示的文字的位置
#'%s' %string string就是文字变量
#ha条形图中的文字居中,在其它的图中应该也有相关属性,还可以通过计算x,y的值手动设置。
plt.text(x[i],y1[i]+0.1,'%s' %y1[i],ha='center')
plt.show()

pyplot.annotate标注

annotate标注可以在文字旁加上箭头,并且有许多的参数变化。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
x=[1, 3, 5, 7, 9]
y1=[1, 7, 3, 9, 5]
plt.bar(x, y1 ,align='center', color='#345345')
plt.xticks(x, x)
#s第一个函数,即要显示的文字
#xy箭头处的坐标
#xytext文字的坐标
#arrowprops箭头函数以字典dict来设置属性
#facecolor箭头颜色
#shrink箭头的缩放在0~1之间
#width点箭头的宽度
plt.annotate('point', xy=(5,4), xytext=(5,7), arrowprops=dict(facecolor='b', shrink=1))
for i in range(len(y1)):
plt.text(x[i],y1[i]+0.1,'%s' %y1[i],ha='center')
plt.show()

小结

这些只是对库中函数的基本使用,我们可以通过它们之间的组合来实现我们对于数据可视化的需求,许多的参数和解释详见matplotlib文档