Python实现对数坐标系绘制与自定义映射

 更新时间:2023年08月02日 08:38:58   作者:微小冷  
这篇文章主要为大家学习介绍了如何利用Python实现对数坐标系绘制与坐标自定义映射,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下

对数坐标系

在实际绘图时,如果x,y这两轴的数据变化速率相差过多,线性的坐标映射将无法展示图形变化的细节,就需要更改坐标系的数字映射逻辑,以获得更具细节的图像。

在matplotlib绘图时,通过set_xscale和set_yscale这两个函数,可以轻松对坐标系进行坐标放缩,并且提供了4个基础的放缩模板,分别是’linear’, ‘log’, ‘symlog’, ‘logit’。

import numpy as np
import matplotlib.pyplot as plt
xs = np.linspace(-5,5,1000)
labels = ['linear', 'log', 'symlog', 'logit']
fig = plt.figure()
for i,L in enumerate(labels, 1):
    ax = fig.add_subplot(2,2,i)
    ax.plot(xs, np.tan(xs))
    ax.plot(xs, np.exp(xs))
    ax.set_yscale(L)
    ax.set_title(L)
    ax.grid()
plt.tight_layout()
plt.show()

从其y轴坐标可以看出,linear就是最常见的线性映射;log是对数坐标;symlog是“双”对数坐标;logit则是中间大、两端小的对数映射。

所以,在log图中,由于对数映射是非对称的,其y轴坐标从小到大依次是0.01,0.1,1,10,100,所以 尽管tanx本应上下对称,但下方却直接超出了坐标轴给定的范围。

自定义映射

set_xscale和set_yscale这两个函数,除了支持matplotlib实现好的字符串标识之外,还支持自定义函数映射。例如,想把y轴映射为根号y ​,则需要定义两个函数,分别用于坐标系映射和图像映射,具体代码如下

forward = lambda x : x**(1/2)
inverse = lambda x : x**2
fig, ax = plt.subplots()
xs = np.linspace(0,4,100)
ax.plot(xs, np.exp(xs))
ax.set_yscale('function', functions=(forward, inverse))
ax.set_title('function: $x^{1/2}$')
ax.grid()
plt.tight_layout()
plt.show()

绘图结果如下

可以看到,y轴方向等间隔的刻度,其映射的长度是依次减半的。10到20在y向的长度,差不多是0到10的二分之一。

对数坐标图

虽然上面的例程均通过plot图来演示,但set_xscale和set_yscale其实适用于各种图像。而针对折线图的对数坐标图,matplotlib已经实现了更加成熟的封装,即semilogx, semilogy和loglog。

fig, (ax1, ax2, ax3) = plt.subplots(1,3, figsize=(8,3))
ax1.semilogx(t, np.sin(2 * np.pi * t))
ax1.set(title='semilogx')
ax1.grid()
ax2.semilogy(t, np.exp(-t / 5.0))
ax2.set(title='semilogy')
ax2.grid()
ax3.loglog(t, 20 * np.exp(-t / 10.0))
ax3.set(title='loglog')
ax3.grid()
plt.tight_layout()
plt.show()

结果为

其中,semilogx和semilogy顾名思义,分别是对x轴和y轴进行坐标映射,而log则对两个轴都进行了坐标映射。

到此这篇关于Python实现对数坐标系绘制与自定义映射的文章就介绍到这了,更多相关Python对数坐标系内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python numpy linspace函数使用详解

    python numpy linspace函数使用详解

    本文介绍了Python Numpy库中的linspace函数,该函数用于生成均匀分布的数值序列,通过示例和详细参数解释,帮助读者理解如何使用linspace函数,最后,对比了linspace和arange函数之间的主要差异,感兴趣的朋友跟随小编一起看看吧
    2024-12-12
  • 浅谈python中的占位符

    浅谈python中的占位符

    这篇文章主要介绍了浅谈python中的占位符,分享了其简单实例,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • Python中Yield的基本用法

    Python中Yield的基本用法

    这篇文章主要给大家介绍了关于Python中Yield的基本用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • python实现两个字典合并,两个list合并

    python实现两个字典合并,两个list合并

    今天小编就为大家分享一篇python实现两个字典合并,两个list合并,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • tensorflow模型保存、加载之变量重命名实例

    tensorflow模型保存、加载之变量重命名实例

    今天小编就为大家分享一篇tensorflow模型保存、加载之变量重命名实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • 实时获取Python的print输出流方法

    实时获取Python的print输出流方法

    今天小编就为大家分享一篇实时获取Python的print输出流方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • 详解Python flask的前后端交互

    详解Python flask的前后端交互

    这篇文章主要为大家详细介绍了Python flask的前后端交互,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • python算法演练_One Rule 算法(详解)

    python算法演练_One Rule 算法(详解)

    下面小编就为大家带来一篇python算法演练_One Rule 算法(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • Python高效解析和操作XML/HTML的实用指南

    Python高效解析和操作XML/HTML的实用指南

    在 Python 生态系统中,lxml 是一个功能强大且广泛使用的库,用于高效地解析和操作 XML 和 HTML 文档,这篇文章从 lxml 的基础安装开始,逐步深入讲解如何解析文档、提取数据、修改文档结构,并涵盖了处理大型文档和使用命名空间等进阶操作,需要的朋友可以参考下
    2024-10-10
  • Django中的forms组件实例详解

    Django中的forms组件实例详解

    这篇文章主要介绍了Django的forms组件,本文通过实例代码介绍了Django的forms组件,需要的朋友可以参考下
    2018-11-11

最新评论