如果你之前从未接触过python,为了方便你更好理解,麻烦先去看我的
初学者一看就懂的入门python1和2
什么是matplotlib?
matplotlib是一个Python模块,用于生成二维和三维绘图
它基于MATLAB中的绘图工具
它非常灵活-绘图的所有方面都可以通过编程进行控制
它可以生成图形、条形图、散点图、等高线和曲面图等
它可以生成多种格式(png、pdf、svg等)的高质量输出
什么是SVG?
JPEG和PNG等图像格式是位图或光栅图像:它们仅由像素的行和列组成,最适合于照片或复杂的计算机生成的艺术品。**SVG完全不同,因为它是一种矢量图形格式(SVG代表可缩放矢量图形)。**图像由形状(矩形、圆等)、线条、文本等单个元素组成,而不是像素。
这使得它更适合于简单的图像,如图形、图表或徽标。
%matplotlib inline %config InlineBackend.figure_format='svg' import matplotlib.pyplot as plt import numpy as np x = np.linspace(0,5,10) y = x ** 2 plt.plot(x, y)
linspace(start、stop、num=50、endpoint=True、retstep=False、dtype=None、axis=0)
返回指定间隔内的等距数字。
返回在[start,stop]间隔内计算的等距采样数。
参数
序列的起始值。
停止数组
序列的结束值,除非端点设置为False。在这种情况下,序列由除最后一个num+1等距采样外的所有采样组成,因此停止被排除。请注意,当端点为False时,步长会更改。
numint,可选:要生成的样本数。默认值为50。必须是非负的。
端点布尔,可选:如果为True,则停止为最后一个样本。否则,不包括在内。默认值为True。
retstepbool,可选:如果为True,则返回(样本,步长),其中步长是样本之间的间距。
数据类型,可选:输出数组的类型。如果未给出数据类型,则从开始和停止推断数据类型。推断出的数据类型永远不会是整数;即使参数将生成整数数组,也会选择float。
Axismint,可选:结果中用于存储样本的轴。仅当“启动”或“停止”类似于数组时才相关。默认情况下(0),采样将沿着在开始处插入的新轴。使用-1在末端获得一个轴。
样本阵列:闭合间隔[start,stop]或半开放间隔[start,stop]中有num个等距采样(取决于端点是真还是假)。
语法np.linspace(start、stop、num)将是您可能使用最多的语法。
默认情况下,np.linspace()函数在生成的数组中同时包含开始端点和停止端点。如果不希望包含停止端点,请将False传递给端点参数。例如,让我们在2和20之间创建10个等距值,其中不包括20。
plt.figure() plt.plot(x, y, 'b-') plt.xlabel('x') plt.ylabel('y') plt.title('Plot of y = 2^x')
在Python里figure类似于画布
matplotlib.pyplot.plot() 方法接受以下描述的参数(args, scalex=True, scaley=True, data=None):
x、 y:这些参数是数据点的水平和垂直坐标。x值是可选的。
fmt:此参数是可选参数,包含字符串值。
数据:此参数是可选参数,是带有标记数据的对象。
返回以下内容:
lines:返回表示打印数据的Line2D对象列表。
fig = plt.figure() axes = fig.add_axes([0.1, 0.1, 0.9, 0.9]) axes.plot(x, y, 'r-') axes.set_xlabel('x') axes.set_ylabel('y') axes.set_title('y = 2^x')
Matplotlib.figure.Figure.add_axes() in Python
此选项接受以下描述的参数:
rect:此参数是新轴的尺寸[左、下、宽、高]。
投影:此参数是轴的投影类型。
sharex,sharey:这些参数与sharex和/或sharey共享x轴或y轴。
标签:此参数是返回轴的标签。
返回:此方法返回Axis类,具体取决于所使用的投影。
fig = plt.figure() axes1 = fig.add_axes([0.1, 0.1, 0.8, 0.8]) axes1.plot(x, y, 'r-') axes2 = fig.add_axes([0.2, 0.5, 0.2, 0.2]) axes2.plot(x,-y, 'g-')
图形中的多个轴
fig, axes = plt.subplots(nrows=2, ncols=3) for ax in axes.reshape(-1): #axes返回一个2x4 numpy数组;重塑为向量 ax.plot(x, y, 'r') ax.set_ylabel('y axis') ax.set_xlabel('x axis') fig.tight_layout()
axes 没有固定的类型,如果n 只有一位,那么axes就是完全的一个普通的数字
如果n>1 且 plt.subplots(n, 1) 中括号里边的数字是1 那么就是一个一维数组,那么引用的时候,就应该ax=ax[i]
如果n>1 且 plt.subplots(n, 2) 中括号里边的数字是2 或者是大于2的数字,那么就是一个二维数组,引用的时候,应该ax=ax[1][1] 类型这样
子图中的轴标签彼此重叠,这在视觉上没有吸引力。
如果将plt.tight_layout()语句添加到此代码块的末尾,此问题将自行解决。
写入文件(许多格式可用)
Matplotlib.pyplot.savefig()
顾名思义,savefig()方法用于保存打印数据后创建的图形。使用此方法可以将创建的图形保存到本地计算机。
fig.savefig('myplot.png') fig.savefig('myplot.pdf', dpi=200) # 设置“每英寸点数” fig, ax = plt.subplots() # 默认情况下,返回单个轴 ax.plot(x, x*2, label='x*2') ax.plot(x, x*x, label='x^2') ax.plot(x, 2**x, label='2^x') ax.legend(loc=0) # 1=UR, 2=UL, 3=LL, 4=LR, 0=matplotlib decides
这是添加图例的一个很好的示例
fig, ax = plt.subplots() ax.plot(x, y, color='purple', linewidth=2, linestyle='-', marker='o', markersize=8) ax.plot(x, y*2, lw=2, ls='-', marker='o', c='red', ms=8) ax.plot(x, y*3, lw=2, ls='-.', marker='s', ms=10, mfc='red', mec='blue', mew=2) ax.plot(x, y*4, lw=2, ls=':', marker='o', c='#ff9915', ms=8)
标记符号可以是“+”、“s”、“*”、“o”和许多其他符号
这是显示不同颜色、线条样式的一个很好的示例
fig, ax = plt.subplots() ax.plot(x, 2**x) ax.set_xlim([1, 4]) ax.set_ylim([2, 16]) ax.set_yscale('linear') # can be 'linear' or 'log' ax.set_yticks([2, 4, 8, 16]) ax.set_xticks([1, 2, 3, 4]) ax.set_xticklabels(['one', 'two', 'three', 'four'], fontsize=12) ax.grid(color='red', linewidth=2, linestyle='dashed')
如果是log整个图形会形成大小一样的网状格,而linear则会按照设定的X和Y来画线
x = np.linspace(-5, 5, 50) fig, ax = plt.subplots() ax.plot(x, x**3) ax.plot(x, x**2 * 5) ax.spines['left'].set_position(('data', 0)) ax.spines['bottom'].set_position(('data', 0)) ax.spines['top'].set_color('none') ax.spines['right'].set_color('none') ax.axis('tight')
ax.spines是限制绘图区域的线。根据具体情况,我们可能需要移除部分(或全部)它们、更改它们的颜色、降低它们的可视性、调整它们的宽度/样式或更改它们的位置。
我们要从轴上移除顶部脊椎。为此,我们可以使用面向对象API接口的set_visible()方法
语法如下:ax.spines[‘top’].set_visible(False)。要移除多个脊椎,使用For循环是有意义的
否则,我们可以将其颜色设置为“无”
总而言之,spin 有点像图形中的分割线,但是它的作用是限制区域
x = np.linspace(-5, 5, 10) fig, ax = plt.subplots() ax.plot(x, x * 2 + 1) ax.axis('tight') ax.text(0, -2, 'The line is blue', fontsize=16) ax.text(-2, 5, '$y=2x+1$', fontsize=16)
在原本的图像上加上文字描述
其他绘图类型fig, ax = plt.subplots(nrows=1, ncols=2) # Shade the region between two curves x = np.linspace(-5,5,50) ax[0].fill_between(x, 0, x**2 * 2, color='purple') ax[0].axis('tight') # Draw a bar chart (i.e. histogram) y = np.linspace(-5, 5, 10) ax[1].bar(y, y**2, color='green')
绘制数据-直方图
x = np.random.randn(100000) fig, ax = plt.subplots(nrows=1, ncols=2) ax[0].hist(x, bins=100) ax[0].set_title('a normal distribution') ax[1].hist(x, cumulative=True, bins=20) ax[1].set_title('cumulative distribution') fig.tight_layout()
绘制数据-散点图
x = np.random.randn(1000) y = 15 * x + 10 * np.random.randn(1000) fig, ax = plt.subplots() ax.scatter(x, y)
三维绘图
例如,将“z=cos(x)+sin(y)”绘制为强度贴图
axis=np.linspace(-5, 5, 100) (X,Y) = np.meshgrid(axis, axis) # outputs matrices X and Y storing grid of pixel coordinates Z = np.cos(X) + np.sin(Y) # perform some operation on the coordinate values fig, ax = plt.subplots() ax.imshow(Z, extent=[-5, 5, -5, 5]) # 'extent' used to set axes labels correctly
都看到这里了,麻烦关注一下勤耕的小K或者是点个赞吧
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)