Python画图小知识点

参考初高中画函数图像的步骤:画出函数利用python如何设置画布的大小 python画图设置图片大小_坐标轴利用python如何设置画布的大小 python画图设置图片大小_坐标轴_02的函数图像

第1步:获取函数利用python如何设置画布的大小 python画图设置图片大小_利用python如何设置画布的大小_03,以及其对应的定义域利用python如何设置画布的大小 python画图设置图片大小_利用python如何设置画布的大小_04

x = np.linspace(-9, 9, 1000) 
y = (np.exp(x) - np.exp(- x))/(np.exp(x) + np.exp(- x))

解释一下这里为什么用np.exp( ): 如果用exp( )或者math.exp( ),会得到错误提示:only size-1 arrays can be converted to Python scalars.

第2步:取出一张纸,思考函数图像要画多大?将纸分为几部分合适?要把函数图像在哪个部分?

2.1 设置绘图对象大小

fig = plt.figure(figsize = (8, 8))

2.2 添加一个绘布对象ax,并将绘布分割成2 * 1个部分,并将fig对象放置在第1个位置

ax = axisartist.Subplot(fig, 2,1,1)

补充一下关于plt.figure(num, figsize, dpi)函数的常用参数
num:这个参数表示你图片保存文件时文件的名称,可以接受str 和 int 类型的参数,如果不设置,则默认从1自增到N
figsize:图片大小的参数,接受(a, b)这样的参数对
dpi:图片的像素密度

关于axisartist.Subplot(fig, m, n, position)的参数
fig:当前绘图对象
m 和 n:表示将绘布对象分割成m*n个小块
position:表示将当前绘图对象放置在绘布的第position个小块

第3步:画坐标轴

3.1 首先允许对绘布上的当前绘图对象fig进行操作

fig.add_axes(ax)

3.2 由于python默认的坐标轴是一个矩形,所以首先让矩形四条边(top,bottom,left,right)不可见,方便添加新的坐标轴

ax.axis[:].set_visible(False)

Python默认的坐标系

利用python如何设置画布的大小 python画图设置图片大小_matplotlib_05


3.3 向画布对象中添加两条坐标轴x和y,并让其正交

ax.axis["x"] = ax.new_floating_axis(0, 0)
ax.axis["y"] = ax.new_floating_axis(1, 0)

3.4 设置刻度的方向,x轴的刻度在bottom方向,y轴刻度在left方向

ax.axis["x"].set_axis_direction('bottom')
ax.axis["y"].set_axis_direction('left')

3.5 在x和y轴上添加箭头

ax.axis["x"].set_axisline_style("-|>", size = 2.0)
ax.axis["y"].set_axisline_style("-|>", size = 2.0)

画好的直角坐标系

利用python如何设置画布的大小 python画图设置图片大小_python画图_06


3.6 为坐标轴设定范围

ax.set_xlim(-6.5, 6.5)
ax.set_ylim(-1.1, 1.1)

解释一下,为什么题目要求利用python如何设置画布的大小 python画图设置图片大小_利用python如何设置画布的大小_07的范围是[-6, 6],却将范围设置为[-6.5, 6.5],目的是使坐标轴长度比实际区间长一点,让坐标轴箭头有一定的空间,显得更加美观

3.7 为坐标轴设置自定义刻度

ax.set_xticks([-6,-3, 3, 6])
ax.set_yticks([-1, -0.5, 0.5, 1])

同样的,从之前画好的直角坐标系中看到,原点有两个标注,并不美观,因此直接把想要标的刻度生成一个列表,标注上去,如果嫌麻烦,可以尝试使用MultipleLocator方法,具体用法请自行百度。

3.8 为坐标轴标上标签

ax.axis["x"].label.set_text("x")
ax.axis["y"].label.set_text("y")

坐标轴(个人喜好没有标签)

利用python如何设置画布的大小 python画图设置图片大小_坐标轴_08

第4步:画函数图像,并写上函数名称(标题)

4.1 画函数图像

ax.plot(x, y, linewidth = 2, color = 'red')

4.2 写上函数名称

plt.title(r'f(x)', fontstyle = 'italic', fontweight = 'medium', fontsize = 18, pad = 20)
plt.annotate(r'$f(x) = \frac{e^{x} - e^{-x}}{e^{x} + e^{-x}}$', \
    xy = (0, 0), \
    xycoords = 'data', \
    xytext = (+110, +110), \
    textcoords = 'offset points', \
    fontsize = 12)

标题可以支持markdown语法

最终结果和完整的代码

利用python如何设置画布的大小 python画图设置图片大小_python画图_09

import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.axisartist as axisartist
x = np.linspace(-10, 10, 10000)
y = (np.exp(x) - np.exp(- x))/(np.exp(x) + np.exp(- x))
fig = plt.figure(num = "tanh", figsize = (8, 8))
ax = axisartist.Subplot(fig, 1,1,1)
fig.add_axes(ax)
ax.axis[:].set_visible(False)
ax.axis["x"] = ax.new_floating_axis(0, 0)
ax.axis["y"] = ax.new_floating_axis(1, 0)
ax.axis["x"].set_axisline_style("-|>", size = 2.0)
ax.axis["y"].set_axisline_style("-|>", size = 2.0)
ax.axis["x"].set_axis_direction('bottom')
ax.axis["y"].set_axis_direction('left')
ax.set_xticks([-6,-3, 3, 6])
ax.set_yticks([-1, -0.5, 0.5, 1])
ax.set_xlim(-6.5, 6.5)
ax.set_ylim(-1.1, 1.1)
#ax.axis["x"].label.set_text("x")
#ax.axis["y"].label.set_text("y")
plt.title(r'f(x)', fontstyle = 'italic', fontweight = 'medium', fontsize = 18, pad = 20)
plt.annotate(r'$f(x) = \frac{e^{x} - e^{-x}}{e^{x} + e^{-x}}$', xy = (0, 0), xycoords = 'data', xytext = (+110, +110), textcoords = 'offset points', fontsize = 12)
ax.plot(x, y, linewidth = 2, color = 'red')
plt.show()