Python数据分析基础技术之Matplotlib

Matplotlib 是 Python 的绘图库。 它可与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案。 它也可以和图形工具包一起使用,如 PyQt 和 wxPython。

鉴于Matplotlib 可能是 Python 2D-绘图领域使用最广泛的套件。它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。这里将会探索 matplotlib 的常见用法。

matplotlib 官网 http://matplotlib.org/ 点击 docs 查阅参考文档和 API(方法和模块)
Python数据分析基础技术之Matplotlib_第1张图片
Python数据分析基础技术之Matplotlib_第2张图片
Python数据分析基础技术之Matplotlib_第3张图片

1、Matplotlib基本线图绘制

导入库模块:

import numpy as np        
import matplatlib.pyplot as plt    

定义图像定义域:

x = np.linspace(-np.pi, np.pi, 256, endpoint=True)      #-pi和pi之间取256个点,并包含最后一个点

定义图像函数:

 c, s = np.cos(x), np.sin(x) 

绘图:

plt.figure(1)  #制定为图1
plt.plot(x, c, color='blue', linewidth=1.0, linestyle='-', label="Cos", alpha=0.2)    #自变量,因变量,线颜色,线宽,图像标签,透明度

plt.plot(x, s, "r*", label="Sin")        #另一种制定方式, r代表red,*代表线型

# 设置横轴的上下限
plt.xlim(-4.0,4.0)

# 设置纵轴的上下限
plt.ylim(-1.0,1.0)

plt.title("Cos & Sin")     #图像标题

plt.show()

Python数据分析基础技术之Matplotlib_第4张图片
显示两个坐标轴(通过对图1四周的边线来显示坐标轴):

ax = plt.gca()     # gca就是轴的一个编辑器
   
ax.spines["right"].set_color("none")     # spines 是四周的边线,none代表隐藏(右边)
ax.spines["top"].set_color("none")       # spines 是四周的边线,none代表隐藏 (上面)

ax.spines["left"].set_position(("data", 0))       # 位置设置到数据域的 0 位置
ax.spines["bottom"].set_position(("data", 0))    #位置设置到数据域的 0 位置

plt.show()

Python数据分析基础技术之Matplotlib_第5张图片
设置坐标轴的记号:

ax.xaxis.set_ticks_position('bottom')        #设置x轴的标注位于横轴的下面

ax.yaxis.set_ticks_position('left')       #设置y轴的标注位于纵轴的左边

plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],[r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$'])  注意这里使用了 LaTeX。

plt.yticks(np.linspace(-1,1,5,endpoint=True))    #纵轴设置5个记号

for label in ax.get_xticklabels() + ax.get_yticklabels():    #get获取记号,设置记号字体大小和颜色
    label.set_fontsize(20)
    label.set_bbox(dict(facecolor="white", edgecolor="None", alpha=0.2))     # facecolor背景颜色,edgecolor边缘颜色,alpha透明度
    
legend(loc='upper left')     #图例,loc位置为上左
plt.grid()        #显示网格线
plt.axis([-np.pi,-np.pi, -1, 1])      #指定图像显示范围,前两个是横轴,后两个是纵轴

plt.show()

Python数据分析基础技术之Matplotlib_第6张图片
填充和注释功能:

plt.fill_between(x, np.abs(x) < 0.5, c, c > 0.5, color="green", alpha=0.25)    # 在c>0.5的区域内填充函数y=np.abs(x)<0.5与c函数包围的区域  ,对于函数y=np.abs(x)<0.5是分段函数,-0.5-0.5为1,其余区间为0

t = 1     #在t等于1的位置注释
plt.plot([t, t], [0, np.cos(t)], "y", linewidth=3, linestyle="--")     #(t,0)到(t,cos(t))添加注释(y代表黄色),线型为虚线
plt.annotate("cos(1)", xy=(t, np.cos(1)), xytest=(1.5,0.6),testcoords="offset points",
                 arrowprops=dict(arrow,facecolor="black",shrink=0.05,connection))  

#annotate参数详解:
——“标注”
——xy=(横坐标,纵坐标) :箭头尖端
——xytext=(横坐标,纵坐标):文字的坐标,指的是最左边的坐标,
——arrowprops= {facecolor= '颜色',shrink = '数字' <1  收缩箭头 }      
  
plt.show()

Python数据分析基础技术之Matplotlib_第7张图片

2、子图与多种图形绘制

散点图(scatter):

import numpy as np
import matplotlib.pyplot as plt     #导入库

fig=plt.figure()      #创建画布
ax = fig.add_subpolt(3,3,1)     #将画布分割成3行3列,图像画在从左到右从上到下的第1块,也可以是add_subplot(331)

n=128   
X=np.random.normal(0,1,n)    #0-1之间产生n个随机数 
Y=np.random.normal(0,1,n)   #0-1之间产生n个随机数
T=np.arctan2(Y,X)         #arctan函数用于上色——渐变色 
# plt.axes([0.025,0.025,0.95,0.95])     #子图显示范围,左下角(0.025,0.025),右上角为(0.95,0.95)
x.scatter(X,Y,s=75,c=T,alpha=.5)    #scatter(x, y, 点的大小, 颜色,标记)
plt.xlim(-1.5,1.5),plt.xticks([])      #x轴范围,标签为空
plt.ylim(-1.5,1.5),plt.yticks([])      #y轴范围,标签为空
plt.axis()      #坐标轴线
plt.title("scatter")
plt.xlabel("x")   #标签
plt.ylable("y")
plt.show()

柱状图(bar):

fig.add_subplot(332)
n=10
X=np.arange(n)
Y1=(1-X/float(n)*np.random.uniform(0.5,1.0,n)    #生成n个随机数,范围在0.5-1.0
Y2=(1-X/float(n)*np.random.uniform(0.5,1.0,n)

plt.bar(X,+Y1,facecolor='#9999ff',edgecolor='white')    #颜色,裱框颜色
plt.bar(X,-Y2,facecolor='#ff9999',edgecolor='white')

for x,y in zip(X,Y1):
    plt.text(x+0.4,y+0.05,'%2f'%y,ha='center',va='bottom')      #柱状图添加text
for x,y in zip(X,Y2):
    plt.text(x+0.4,-y-0.05,'%2f'%y,ha='center',va='top')
    
plot.show()

饼图(pie):

fig.add_subplot(333)
n = 20     #20个部分
Z = np.ones(n)    #20个全为1 
Z[- 1] *= 2      #最后一个改为2
plt.pie(Z, explode=Z * .05, colors=['%f' % (i / float(n)) for i in range(n)],labels=['%.2f' % (i / float(n)) for i in range(n)])     #扇形的值,扇形到中心的距离,颜色,标签
plt.gca().set_aspect('equal')     #设置为正圆
plt.xticks(), plt.yticks([])     #坐标记号为空

极坐标图(polar):

fig.add_subplot(334, polar=True)
n = 20
theta = np.arange(0.0, 2 * np.pi, 2 * np.pi / n)
radii = 10 * np.random.rand(n)
# plt.plot(theta,radii)
plt.polar(theta, radii)

热图(heatmap):

fig.add_subplot(335)
from matplotlib import cm
data = np.random.rand(3, 3)
cmap = cm.Blues
map = plt.imshow(data, interpolation='nearest', cmap=cmap,
                 aspect='auto', vmin=0, vmax=1)

3D图:

from mpl_toolkits.mplot3d import Axes3D
ax = fig.add_subplot(336, projection="3d")
ax.scatter(1, 1, 3, s=100)

热力图(hot map):

fig.add_subplot(313)    #3行1列第三个相当于3行3列第7,8,9个
 
def f(x, y):
    return (1 - x / 2 + x ** 5 + y ** 3) * np.exp(-x ** 2 - y ** 2)
 
n = 256
x = np.linspace(-3, 3, n)
y = np.linspace(-3, 3, n)
X, Y = np.meshgrid(x, y)
plt.contourf(X, Y, f(X, Y), 8, alpha=.75, cmap=plt.cm.hot)
plt.savefig("./fig.png")  #保存图
plt.show()

子图结果:
Python数据分析基础技术之Matplotlib_第8张图片
Matplotlib的基础知识与操作就到这里,接下来我们来一起了解Scipy常见用法(点击进入)

你可能感兴趣的:(后端,Python)