Python data analyse & AI

绘图与可视化——Matplotlib

2018-04-24  本文已影响12人  文婷_5250

Matplotlib 入门知识

matplotlib在Python中应用最多的2D图像的绘图工具包,使用matplotlib能够非常简单的可视化数据。在matplotlib中使用最多的模块就是pyplot。pyplot非常接近Matlab的绘图实现,而且大多数的命令及其类似Matlab.当然,与Matlab类似,需要很多的数学运算,因此numpy这个组件同样是必不可少的。所以很多人说python+matplotlib+numpy就是MATLAB。
首先,在matplotlib建议使用别名,引入包,这样方便以后模块的使用,一般以以下两句开始:

import numpy as np
import matplotlib.pyplot as plt

对plot函数的讲解

上面介绍了简单的绘图,用的基本上都是plot,因此有必要对plot函数进行简单的介绍。官网参考网址:plot使用。熟悉Matlab的人对plot不会陌生,在matplotlib中的使用方式大致和Matlab中是一致的,使用plot,可以对点的标记的样式以及线条的样式进行设置。

函数的声明为:matplotlib.pyplot.plot(*args, **kwargs)。args的参数的长度是不定 的,可以设置很多的属性,kwargs主要是应用于设置线条的属性。对于标注和线条的样式,可以通过简单的字符来表示。
More

一些单词

plot 绘图 axis 轴线 axisymmetric 轴对称的 spines 象限 tick 标记
solid line 实线 dashed line (--)虚线 dash-dot 点画线 dotted line (::)虚线
pixel marker (,)像素标记 triangle down (^)下三角标记 square marker 正方形标记

figure对象画图

接下来调用figure创建一个绘图对象,并且使用它成为当前的绘图对象。
figsize参数指定对象的宽度和高度,单位为英寸;dpi:分辨率,即每个英寸多少像素,缺省值是80,如下创建窗口的宽度为8*80=640像素。

put.figure(figsize=(8,4))

plot函数画图

也可以不创建绘图对象直接用plot函数绘图,matplotlib会自动创建一个绘图对象。

plt.plot(x,y,label="$sin(x)$",color="red",linewidth=2)
plt.plot(x,z,"b--",label="$cos(X^2)$")

其他函数设置属性

plt.xlabel("Time(s)")
plt.ylabel("Volt")
plt.title("PyPlot Forsdt Example")
plt.ylim(-1.2,1.2)
plt.legend()

显示出所有绘图对象:

plt.show()

多幅图表

如果需呀同时绘制多幅图表的话,可以传递一个整数参数指定对应图标的序号给figure对象,也可以使用subplot函数绘制有多个轴的图片。

subplot(numRows,numCols,plotNum)
subplot在plotNum指定的区域中创建一个轴对象,如新创建的轴与之前轴重叠的话,之前的会被删除。
创建3行2列6个轴,通过axisbg参数给每个轴设置不同的颜色:
for idx, color in enumerate("rgbyck"):
plt. subplot(320+idx+1.axisbg=color)
plt.show()
sup=bplots_adjust()调节轴间距及边框间距。

保存图像文件

plt.savefig("test.png",dpi=120)
dpi为120输出8*120个像素宽度图片。

多幅图时选定图并绘图

创建2个图1,2,在图2创建上下并排两个子图,用变量分别保存:

plt.figure(1)
plt.figure(2)
ax1 = plt.subplot(211)
ax2 = plt.subplot(212)
在循环中,选定图1为当前图,在上面绘图,然后让图2两个子图为当前图,并绘图:
for i in xrange(5):
plt.figure(1)
plt.plot(x,np.exp(Ix/3))
plt.sca(ax1)
plt.plot(x,np,sin(I
x))
plt.sca(ax2)
plt.plot(x,np,cos(I*x))
plt.show()

坐标轴设定

Axis容器包括坐标轴的刻度线/刻度标签/坐标网格及坐标轴标题等,刻度分主刻度和副刻度。以下绘制线图并得到当前图的X轴对象axis:

plt.plot([1,2,3],[4,5,6])
plt.show()
axis = plt.gca().xaxis
axis.get_ticklocs()#刻度位置列表
axis.get_ticklabels()#标签列表
[x.get_text() for x in axis.get_ticklabels()]#文本字符串
more

对数坐标图

w = np.linspace(0.1,1000,1000)
p =n np.abs(1/(1+0.1j*w))

plt.subplot(221)
plt.plot(w,p,linewidth=2)
plt.ylim(0,1.5)

plt.subplot(222)
plt.semilogx(w,p,linewidth=2)
plt.ylim(0,1.5)

plt.subplot(223)
plt.semilogy(w,p,linewidth=2)
plt.ylim(0,1.5)

plt.subplot(224)
plt.loglog(w,p,linewidth=2)
plt.ylim(0,1.5)

plt.show()

柱状图

柱状图每根柱子长度表示大小,用来对比多组值。

data = np.loadtxt("xxx.txt")
width = (data[1,0]-data[0,0])*0.4
plt.figure(figsize=(8,5))
//让每根柱子左侧的横坐标为年纪减去柱子的宽度
plt.bar(data[:,0]-width,data[:,1]/1e7, width, color='"b",label=u"男")

plt.bar(data[:,0]-width,data[:,2]/1e7, width, color='"r",label=u"女")
plt.xlim(0width,100)
plt.xlabel(u"年龄")
plt.ylabel(u"人口(千万)")
plt.legend()

plt.show()

散列图

plt.plot(np.random.random(100), np.random.random(100),"o")
plt.figure(figsize=(8,4))
x = np.random.random(100)
y = np.random.random(100)
plt.scatter(x,y,s=x*1000,c=y,marker=(5,1),alpha=0.8,lw=2, facecolors="none")
plt.xlim(0,1)
plt.ylim(0,1)

plt.show()

scatter()函数前三个参数是数组

饼图

ply.pie()
explode 将某部分弹出来,数据使用元组,数值的大小是分割出来的与其他两块的间隙
labeldistance 文本的位置离原点有多远,1.1指1.1倍半径的位置
autopct 圆里面的文本格式,%3.1f%%表示小数有三位,整数有一位的浮点数
shadow 饼是否有阴影
startangle 起始角度,0,表示从0开始逆时针转,为第一块。一般选择从90度开始比较好看
pctdistance 百分比的text离圆心的距离

极坐标图
图像
等值线图
三维绘图

酷炫Matplotlib
more

上一篇 下一篇

猜你喜欢

热点阅读