Matplotlib 概览
Matplotlib 是 Python 的绘图库。 它可与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案。 它也可以和图形工具包一起使用,如 PyQt 和 wxPython。
面向对象绘图
一般 绘图步骤都是首先创建 Figure 对象,它类似于一张画布,可以在这张画布上绘制其 他对象。
plt . figure( num=None, figsize=None , dpi=None, facecolor=Non e, edgecolor= None, frameon= True, FigureClass=<>, **kw gs)
fig = plt.figure()
x = np.linspace(0, 2*np.pi, 100)
plt.plot(x, np.sin(x))
plt.show()
设置坐标系
坐标网格
plt.grid ()
- axis 默认 axis=' both’, 还可以设置为x 或者y ,分别表示表格线是垂直于x 轴还是垂直于y
- color 设置表格线的颜色
- linestyle 设置表格线的线形,例如 linestyle =’_'
- linewidth '表格线的宽度,例如 linewidth =2
import numpy as np
from matplotlib import pyplot as plt
fig = plt.figure()
x = np.linspace(0, 2*np.pi, 100)
plt.plot(x, np.sin(x))
plt.grid(axis='y', color='gray')
plt.show()
坐标轴
标题和坐标范围
import numpy as np
from matplotlib import pyplot as plt
fig = plt.figure()
x = np.linspace(0, 2*np.pi, 100)
plt.plot(x, np.sin(x))
plt.xlabel('x axis') #新增 轴设直标题
plt.xlim((-2, 10)) #新增,为 轴设直数值范围
plt.show()
分割布局
fig, ax= plt.subplots(2, 1)
ax[0].plot(np.linspace(0, 2*np.pi, 100), np.sin(np.linspace(0, 2*np.pi, 100)))
ax[1].plot(np.linspace(0, 2*np.pi, 100), np.cos(np.linspace(0, 2*np.pi, 100)))
plt.show()
分区
使用 pit.subplots () 绘图 ,则可以 在画布上生成多个坐标系,每个坐标系都是 Axes 容器对象。
fig, ax = plt.subplots(3, 3, sharex='col', sharey='row')
for i in range(3):
for j in range(3):
ax[i, j].text(0.5, 0.5, str(( i, j)), fontsize=18, ha='center')
plt.show()
fig.add axes () 这个方法也可以在同一张画布上创建 Axes 对象
fig = plt.figure()
ax1 = fig.add_axes([0.1, 0.1, 0.8, 0.8])
ax2 = fig.add_axes([0.6, 0.5, 0.2, 0.3])
plt.show()
绘制图像
曲线
pit.plot() 函数,画函数曲线
fig = plt.figure()
x = np.linspace(0, 2*np.pi, 100)
plt.plot(x, np.sin(x), color='blue', linestyle='dashdot', marker='.')
plt.plot(x, np.cos(x), color='r')
plt.show()
图例
实现对图例操作的函数是pit.legend()
fig = plt.figure()
x = np.linspace(0, 2*np.pi, 100)
plt.plot(x, np.sin(x), color='blue', linestyle='dashdot', marker='.', label='sin(x)')
plt.plot(x, np.cos(x), color='r', label='cos(x)')
plt.legend(loc='upper right')
plt.show()
散点图
pit.scatter()绘制散点图
#个伪随机数发生器,通过此对象的方法获得随机数。
rng = np.random.RandomState(0)
#得到的是一维数组,该数组的元素是 00 个符合高斯正态分布的随机数。
x = rng.randn(100)
y = rng.randn(100)
#得到的也是 一维数组,它的元素是 100 大于等于 且小于1 浮点数。
colors = rng.rand(100)
sizes = 1000 * rng.rand(100)
plt.scatter( x, y, c=colors, s=sizes, alpha=0.3)
plt.colorbar()
plt.show()
常用统计图
柱形图
plt.bar(left, height, width=0.8, bottom=None, hold=None, data=None, ** kwargs)
position= np.arange(1, 6)
a = np.random.random(5)
b = np.random.random(5)
total_width = 0.2
n = 2
width = total_width / n
position = position - (total_width - width) / n
plt.bar(position, a, width=width, label='a',color='b')
plt.bar(position + width, b, width=width, label='b' , color='r')
plt.legend(loc=0)
plt.show()
条形图
position= np.arange(1, 6)
a = np.random.random(5)
b = np.random.random(5)
plt.barh(position, a, label='a',color='b')
plt.barh(position, -b, label='b' , color='r')
plt.legend(loc=0)
plt.show()
箱线图
boxplot()
fig,ax = plt.subplots(1, 2)
data = [1 , 5, 9, 2]
ax[0].boxplot([data])
ax[0].grid(True)
ax[1].boxplot( [data], showmeans=True)
ax[1].grid(True)
plt.show()
饼图
plt.pie(x, explode=None, labels=None, color s=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=l.1, star tangle=None ,radius=None, counter clock= True, wedgeprops=None, textprops=None, center=(0 ,0), frame=False, hold=None, data=None)
直方图
import matplotlib.mlab as mlab
fig = plt.figure()
mu = 100
sigma = 15
x = mu +sigma * np.random.randn(1000)
num_bins = 100
n, bins, patches = plt.hist(x, num_bins, normed=True, facecolor='blue', alpha=0.5)
y = mlab.normpdf(bins, mu, sigma)
plt.plot(bins, y, 'r--')
plt.show()
绘制三维图像
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits import mplot3d
fig = plt.figure()
ax = plt.axes(projection='3d')
x_line = np.linspace(0, 15, 1000)
y_line = np.sin( x_line)
z_line = np.cos( x_line)
ax .plot3D(x_line, y_line, z_line, 'blue')
x_point = 15 * np.random.random (100)
y_point = np.sin(x_point) + 0.1 * np.random.randn(100)
z_point = np.cos(x_point) + 0.1 * np.random.randn(100)
ax.scatter3D(x_point, y_point, z_point , c=x_point, cmap ='Greens')
plt.show()
来源:oschina
链接:https://my.oschina.net/u/3696975/blog/3173929