Matplotlib

我是研究僧i 提交于 2020-02-26 16:29:56

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()

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!