python2.7 matplotlib_使用Matplotlib绘图-Python成为专业人士笔记

来自python成为专业人士笔记​biblog.bistudio.com.cn

Matplotlib介绍

matplotlib是Python编程语言及其数值数学扩展包 NumPy的可视化操作界面。它利用通用的图形用户界面工具包,如Tkinter, wxPython, Qt或GTK+,向应用程序嵌入式绘图提供了应用程序接口(API)。此外,matplotlib还有一个基于图像处理库(如开放图形库OpenGL)的pylab接口,其设计与MATLAB非常类似–尽管并不怎么好用。SciPy就是用matplotlib进行图形绘制。

matplotlib最初由John D. Hunter撰写,它拥有一个活跃的开发社区,并且根据BSD样式许可证分发。 在John D. Hunter2012年去世前不久,Michael Droettboom被提名为matplotlib的主要开发者。

截至到2015年10月30日,matplotlib 1.5.x支持Python 2.7到3.5版本。Matplotlib 1.2是第一个支持Python 3.x的版本。Matplotlib 1.4是支持Python 2.6的最后一个版本。

与MATLAB的比较

pyplot是matplotlib的一个模块,它提供了一个类似MATLAB的接口。 matplotlib被设计得用起来像MATLAB,具有使用Python的能力。免费是其优点。

与 Gnuplot的比较

gnuplot和matplotlib都是成熟的开源项目。 它们都可以产生多种不同绘图类型。 虽然很难指定一种某人能做而他人不能做的图形类型,但它们仍然具有不同的优点和缺点:

优点缺点Matplotlib带有内置代码的默认绘图样式与Python的深度集成Matlab风格的编程接口(对一些人来说是优点,但对于其他人来说可能是缺点)。图形绘制相较Gnuplot更加美观高度依赖其他包,如Numpy。只适用于Python:很难/不可能在Python以外的语言中使用。 (但可以从Julia通过PyPlot软件包使用)Gnuplot跨语言解决方案:可以用作通过管道或文件以不同语言编写的应用程序(例如GNU Octave,Maxima,JavaGnuplotHybrid)中的绘图引擎。独立程序:没有外部依赖。处理大型数据集时非常快。更容易操纵绘图细节旧的默认绘图样式:通常需要小的调整以产生有吸引力的图。在开发中活跃成员的数量较少(与Matplotlib相比)。

曲线图

>>> import matplotlib.pyplot as plt

>>> import numpy as np

>>> a = np.linspace(0,10,100)

>>> b = np.exp(-a)

>>> plt.plot(a,b)

>>> plt.show()

>>> import matplotlib.pyplot as plt

>>> from numpy.random import normal,rand

>>> x = normal(size=200)

>>> plt.hist(x,bins=30)

>>> plt.show()

散点图

>>> import matplotlib.pyplot as plt

>>> from numpy.random import rand

>>> a = rand(100)

>>> b = rand(100)

>>> plt.scatter(a,b)

>>> plt.show()

3D 图

>>> from matplotlib import cm

>>> from mpl_toolkits.mplot3d import Axes3D

>>> import matplotlib.pyplot as plt

>>> import numpy as np

>>> fig = plt.figure()

>>> ax = fig.gca(projection='3d')

>>> X = np.arange(-5, 5, 0.25)

>>> Y = np.arange(-5, 5, 0.25)

>>> X, Y = np.meshgrid(X, Y)

>>> R = np.sqrt(X**2 + Y**2)

>>> Z = np.sin(R)

>>> surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm)

>>> plt.show()

Matplotlib中的一个简单图形

这个示例演示了如何使用Matplotlib创建简单的正弦曲线 :

import numpy as np

import matplotlib.pyplot as plt

# 介于0 和 2*pi 之间的角

x = np.linspace(0, 2.0*np.pi, 101)

y = np.sin(x)

# 正弦函数

plt.plot(x, y)

plt.show()

向简单图添加更多特性:轴标签、标题、轴刻度、网格和图例

import numpy as np

import matplotlib.pyplot as plt

x = np.linspace(0, 2.0*np.pi, 101)

y = np.sin(x)

# 在x轴和y轴上设置刻度值

xnumbers = np.linspace(0, 7, 15)

ynumbers = np.linspace(-1, 1, 11)

plt.plot(x, y, color='r', label='sin') # r - 红色

plt.xlabel("Angle in Radians")

plt.ylabel("Magnitude")

plt.title("Plot of some trigonometric functions")

plt.xticks(xnumbers)

plt.yticks(ynumbers)

plt.legend()

plt.grid()

plt.axis([0, 6.5, -1.1, 1.1]) # [xstart, xend, ystart, yend]

plt.show()

import numpy as np

import matplotlib.pyplot as plt

x = np.linspace(0, 2.0*np.pi, 101)

y = np.sin(x)

z = np.cos(x)

# X轴和Y轴设置刻度

xnumbers = np.linspace(0, 7, 15)

ynumbers = np.linspace(-1, 1, 11)

plt.plot(x, y, color='r', label='sin') # r - 红

plt.plot(x, z, color='g', label='cos') # g - 绿

plt.xlabel("Angle in Radians")

plt.ylabel("Magnitude")

plt.title("Plot of some trigonometric functions")

plt.xticks(xnumbers)

plt.yticks(ynumbers)

plt.legend()

plt.grid()

plt.axis([0, 6.5, -1.1, 1.1]) # [xstart, xend, ystart, yend]

plt.show()

使用免费创帆云在线JupyterNote运行后效果如下:

通过类似于MATLAB的图叠加,在同一图形中绘制多个图形

import numpy as np

import matplotlib.pyplot as plt

x = np.linspace(0, 2.0*np.pi, 101)

y = np.sin(x)

z = np.cos(x)

# X轴和Y轴设置刻度

xnumbers = np.linspace(0, 7, 15)

ynumbers = np.linspace(-1, 1, 11)

plt.plot(x, y, 'r', x, z, 'g') # r, g - 红和绿

plt.xlabel("Angle in Radians")

plt.ylabel("Magnitude")

plt.title("Plot of some trigonometric functions")

plt.xticks(xnumbers)

plt.yticks(ynumbers)

plt.legend(['sine', 'cosine'])

plt.grid()

plt.axis([0, 6.5, -1.1, 1.1]) # [xstart, xend, ystart, yend]

plt.show()

使用免费创帆云在线JupyterNote运行后效果如下:

多重绘图

与前面的示例类似,这里使用单独的plot命令将正弦曲线和余弦曲线绘制在同一图形上。这更符合python的风格,可以用于为每个plot获得单独的句柄

import numpy as np

import matplotlib.pyplot as plt

x = np.linspace(0, 2.0*np.pi, 101)

y = np.sin(x)

z = np.cos(x)

# X轴和Y轴设置刻度

xnumbers = np.linspace(0, 7, 15)

ynumbers = np.linspace(-1, 1, 11)

plt.plot(x, y, color='r', label='sin') # r - 红

plt.plot(x, z, color='g', label='cos') # g - 绿

plt.xlabel("Angle in Radians")

plt.ylabel("Magnitude")

plt.title("Plot of some trigonometric functions")

plt.xticks(xnumbers)

plt.yticks(ynumbers)

plt.legend()

plt.grid()

plt.axis([0, 6.5, -1.1, 1.1]) # [xstart, xend, ystart, yend]

plt.show()

使用免费创帆云在线JupyterNote运行后效果如下:

使用twiny()绘制相同x轴但不同y轴的图形

import numpy as np

import matplotlib.pyplot as plt

x = np.linspace(0, 2.0*np.pi, 101)

y = np.sin(x)

z = np.sinh(x)

# 分离图形对象和轴对象

fig, ax1 = plt.subplots()

# 复制不同的y坐标轴及相同的x轴

ax2 = ax1.twinx() # ax2 和ax1 将有共同的x轴和不同的y轴

# 在坐标轴1和2上绘制曲线,并获得曲线句柄

curve1,= ax1.plot(x, y, label="sin", color='r')

curve2,= ax2.plot(x, z, label="sinh", color='b')

# 创建一个list列表来访问曲线中的参数

curves = [curve1, curve2]

# 通过坐标轴1或坐标轴2对象添加图例

ax1.legend(curves, [curve.get_label() for curve in curves])

#ax2.legend(curves, [curve.get_label() for curve in curves]) # ax1和ax2任意添加一个即可

# 图像全局属性

plt.title("Plot of sine and hyperbolic sine")

plt.show()

使用创帆云免费JupyterNote云环境运行如下:

使用twiny()绘制共y轴和不同x轴的图形

import numpy as np

import matplotlib.pyplot as plt

y = np.linspace(0, 2.0*np.pi, 101)

x1 = np.sin(y)

x2 = np.sinh(y)

# 在x和y轴上制造刻度值

ynumbers = np.linspace(0, 7, 15)

xnumbers1 = np.linspace(-1, 1, 11)

xnumbers2 = np.linspace(0, 300, 7)

# 分离图形对象和轴对象

fig, ax1 = plt.subplots()

# 用不同的x轴和相同的y轴复制坐标轴

ax2 = ax1.twiny() # ax2 和ax1 将有公共的Y轴和不同的X轴

# 在坐标轴1和2上绘制曲线,并获得曲线句柄

curve1,= ax1.plot(x1, y, label="sin", color='r')

curve2,= ax2.plot(x2, y, label="sinh", color='b')

# 创建一个list 访问参数

curves = [curve1, curve2]

# 给轴1或轴2添加图例(只需给其中一个增加即可)

# ax1.legend(curves, [curve.get_label() for curve in curves])

ax2.legend(curves, [curve.get_label() for curve in curves])

# x axis labels via the axes

ax1.set_xlabel("Magnitude", color=curve1.get_color())

ax2.set_xlabel("Magnitude", color=curve2.get_color())

# y axis label via the axes

ax1.set_ylabel("Angle/Value", color=curve1.get_color())

# ax2.set_ylabel("Magnitude", color=curve2.get_color()) # 注意,这个写法是错误的,ax2 没有属性控制y轴

# y刻度——也给它们上颜色

ax1.tick_params(axis='y', colors=curve1.get_color())

# ax2.tick_params(axis='y', colors=curve2.get_color()) # 注意,此写法是错误的ax2 没有属性控制y轴

#x轴通过坐标轴旋转

ax1.tick_params(axis='x', colors=curve1.get_color())

ax2.tick_params(axis='x', colors=curve2.get_color())

# 设置x轴刻度

ax1.set_xticks(xnumbers1)

ax2.set_xticks(xnumbers2)

# 设置y轴刻度

ax1.set_yticks(ynumbers)

# ax2.set_yticks(ynumbers) # 这样写也是可以的

# 用坐标轴制作网格

ax1.grid(color=curve2.get_color())

ax2.grid(color=curve2.get_color())

ax1.xaxis.grid(False)

# 图表全局属性设置

plt.title("Plot of sine and hyperbolic sine")

plt.show()

使用创帆云免费JupyterNote云环境运行如下:

你可能感兴趣的:(python2.7,matplotlib)