Python画图笔记

Python画图小知识点

参考初高中画函数图像的步骤:画出函数 f ( x ) = e x − e − x e x + e − x f(x) = \frac{e^{x} - e^{-x}}{e^{x} + e^{-x}} f(x)=ex+exexex x ∈ [ − 6 , 6 ] x \in [-6, 6] x[6,6]的函数图像

第1步:获取函数 y = e x − e − x e x + e − x y = \frac{e^{x} - e^{-x}}{e^{x} + e^{-x}} y=ex+exexex,以及其对应的定义域 x ∈ [ − 6 , 6 ] x \in [-6, 6] x[6,6]

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默认的坐标系
矩形坐标系
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)

画好的直角坐标系
直角坐标系
3.6 为坐标轴设定范围

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

解释一下,为什么题目要求 x x x的范围是[-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")

坐标轴(个人喜好没有标签)
自定义刻度的直角坐标系

第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语法

最终结果和完整的代码

最终结果

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()
  • 10
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值