初学者一看就懂的入门python3(多种绘图类型)

初学者一看就懂的入门python3(多种绘图类型),第1张

初学者一看就懂的入门python3(多种绘图类型) 初学者一看就懂的入门python3(多种绘图类型)

如果你之前从未接触过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或者是点个赞吧

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4830273.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-10
下一篇 2022-11-10

发表评论

登录后才能评论

评论列表(0条)

保存