首页 > 其他分享 >在对数坐标系中绘制函数图象

在对数坐标系中绘制函数图象

时间:2024-09-02 10:27:46浏览次数:10  
标签:axs major set 对数 图象 formatter 坐标系

本文记述了用 Matplotlib 在对数坐标系中绘制图象的一种方法,并在以 2 为底的对数坐标系上展示了 选择排序冒泡排序(二)快速排序(四) 的性能数据图象。

笔者按如下布局绘制了 12 (4x3)幅图象,其中 [a,b] 代表某幅图象的位置。

+---------------+---------------+---------------+
|               |               |               |
|    选择排序    |  冒泡排序(二)  |  快速排序(四) |
|               |               |               |      <-- X、Y 为普通坐标
|     [0,0]     |     [0,1]     |     [0,2]     |
|               |               |               |
+---------------+---------------+---------------+
|               |               |               |
|      "        |       "       |       "       |
|               |               |               |      <-- X、Y 轴同时应用对数坐标
|     [1,0]     |     [1,1]     |     [1,2]     |
|               |               |               |
+---------------+---------------+---------------+
|               |               |               |
|      "        |       "       |       "       |
|               |               |               |      <-- 仅 X 轴应用对数坐标
|     [2,0]     |     [2,1]     |     [2,2]     |
|               |               |               |
+---------------+---------------+---------------+
|               |               |               |
|       "       |       "       |       "       |
|               |               |               |      <-- 仅 Y 轴应用对数坐标
|     [3,0]     |     [3,1]     |     [3,2]     |
|               |               |               |
+---------------+---------------+---------------+

代码主体内容如下:

N = np.array([  1024,  2048,  4096,   8192,  16384,   32768,    65536,   131072 ])      #1
S = np.array([ 0.134, 0.537, 2.151,  8.599, 34.415, 137.924,  533.501, 2222.169 ])
B = np.array([ 0.300, 1.198, 4.777, 19.069, 76.458, 305.503, 1213.778, 4877.336 ])
Q = np.array([ 0.006, 0.014, 0.029,  0.061,  0.127,   0.271,    0.564,    1.196 ])

xfmtr = FuncFormatter(lambda x, pos: '{:1.0f}K'.format(x*1e-3) if x >= 1e3 else x)
yfmtr = FuncFormatter(lambda y, pos: '{:1.0f}K'.format(y*1e-3) if y >= 1e3 else y)

fig, axs = plt.subplots(4, 3, figsize=(12,9))           #2

axs[0,0].plot(N, S)                                     #3
axs[0,0].set(title='Selection\n Normal Scalar')
axs[0,0].set(xlabel='N', ylabel='Time')
axs[0,0].grid()
axs[0,0].xaxis.set_major_formatter(xfmtr)               #4
axs[0,0].yaxis.set_major_formatter(yfmtr)

...

axs[1,0].loglog(N, S, basex=2, basey=2)                 #5
axs[1,0].set(title='Log Scalar on X & Y')
axs[1,0].grid()
axs[1,0].xaxis.set_major_formatter(xfmtr)
axs[1,0].yaxis.set_major_formatter(yfmtr)

...

axs[2,0].semilogx(N, S, basex=2)                        #6
axs[2,0].set(title='Log Scalar on X')
axs[2,0].grid()
axs[2,0].xaxis.set_major_formatter(xfmtr)
axs[2,0].yaxis.set_major_formatter(yfmtr)

...

axs[3,0].semilogy(N, S, basey=2)                        #7
axs[3,0].set(title='Log Scalar on Y')
axs[3,0].grid()
axs[3,0].xaxis.set_major_formatter(xfmtr)
axs[3,0].yaxis.set_major_formatter(yfmtr)

...

plt.show()

首先将数据转换为 Numpy 的 ndarray(注:转化过程可省略)(#1)。准备 4x3 的绘图区域,每个绘图区域有独立的坐标系(#2)。在 [0,0] ~ [0,2] 位置,创建普通坐标系并绘制数据(#3),为了让坐标轴数据范围更清晰,同时简化了 X 和 Y 轴的主刻度值(#4)。在 [1,0] ~ [1,2] 位置,创建 X & Y 轴均以 2 为底的对数坐标系并绘制数据(#5)。在 [2,0] ~ [2,2] 位置,创建仅 X 轴以 2 为底的对数坐标系并绘制数据(#6)。在 [3,0] ~ [3,2] 位置,创建仅 Y 轴以 2 为底的对数坐标系并绘制数据(#7)。图象显示结果如下:

figure

完整的代码请参考 [gitee] cnblogs/18388561 。

更多例子请参考 Matplotlib Gallery

标签:axs,major,set,对数,图象,formatter,坐标系
From: https://www.cnblogs.com/green-cnblogs/p/18388561

相关文章

  • PostgreSQL -- 使用 Mybatis 时对数据库的多个删除操作
     在Java中使用Mybatis与PostgreSQL数据库进行交互时,删除操作的语句根据不同的场景应用不同。 1.删除表内所有记录删除表内所有的记录。谨慎使用!<!--1.删除表内所有记录--><deleteid="deleteALl">deletefromtable_name;</delete>2......
  • 用Python解决预测问题_对数线性模型模板
    对数线性模型(Log-linearmodel)是统计学中用于分析计数数据或频率数据的一类模型,特别是在多维列联表(contingencytables)分析中非常常见。这种模型通过取对数将乘法关系转换为加法关系,从而简化了数据分析。在对数线性模型中,我们通常对观测频数的对数进行建模,模型的形式可以表示......
  • 金碟k3 使用py 实现对数据库的增删操作
    金蝶K/3是一款广泛使用的ERP系统,它支持多种数据库,如Oracle、SQLServer和MySQL。为了使用Python对金蝶K/3的数据库进行增删操作,我们需要选择合适的数据库驱动来连接数据库,并使用SQL语句来执行相应的操作。以下是一个示例,展示如何使用Python对金蝶K/3使用的数据库进行增删操......
  • 第101期 低光可见光-红外配对数据集
    引言亲爱的读者们,您是否在寻找某个特定的数据集,用于研究或项目实践?欢迎您在评论区留言,或者通过公众号私信告诉我,您想要的数据集的类型主题。小编会竭尽全力为您寻找,并在找到后第一时间与您分享。重要性及意义一个用于低光视觉的可见光-红外配对数据集的重要性及意义主要体现在以......
  • 负对数似然(NLL)和困惑度(PPL)
    让我们通过一个简单的例子来演示这段代码的计算过程,包括负对数似然(NLL)和困惑度(PPL)的计算。为了简化,我们将假设一个非常小的模型输出和数据。假设:我们有两个样本(即batchsize为2)。每个样本有3个可能的类别,S_logits是模型输出的logits。smask是一个掩码,假设全部为True......
  • 对数据处理过程中,缺失值和异常值应该怎么处理?
    创作不易,您的关注、点赞、收藏和转发是我坚持下去的动力!大家有技术交流指导、论文及技术文档写作指导、项目开发合作的需求可以私信联系我。在数据处理过程中,缺失值和异常值的处理是非常重要的步骤,它们可能会对模型的性能产生显著影响。以下是一些常用的处理方法:一、缺......
  • 使用AWS DMS迁移数据,大概核对数据是否相同
    #!/bin/bashecho"scriptstart...."Source='/data/dba/mysql8/bin/mysql-uadmin_dba-ppassword-hxxx'Target='/data/dba/mysql8/bin/mysql-uadmin_dba-ppassword-hxxxxx'#showdatabases过滤出数据库名echo$Sourcedbs=`$Source......
  • 283:vue+openlayers 4326和3857坐标系下的分辨率区别
    作者:还是大剑师兰特,曾为美国某知名大学计算机专业研究生,现为国内GIS领域高级前端工程师,CSDN知名博主,深耕openlayers、leaflet、mapbox、cesium,canvas,echarts等技术开发,欢迎加微信(gis-dajianshi),一起交流。查看本专栏目录-本文是第283个示例文章目录一......
  • DJI无人机影像地理坐标系校正
    介绍代码简介代码的主要功能是将无人机拍摄的图像中的每个像素位置转换为地理坐标(经纬度),并计算图像的实际物理尺寸。具体包括以下几个步骤:坐标转换:从图像的像素坐标开始,转换为归一化的图像平面坐标。将这些坐标转换为相机坐标系中的坐标,考虑到焦距的影响。坐标系转换......
  • VTK随笔三:坐标系统、空间变换、VTK管线、VTK智能指针
    一、坐标系统 Model坐标系统:定义模型时所采用的坐标系统,通常是局部的笛卡尔坐标系。World坐标系统:是放置Actor的三维空间坐标系,Actor(vtkActor类)其中的一个功能就是负责将模型从Model坐标系统变换到World坐标系统。每一个模型可以定义自己的Model坐标系统,但World坐标系只有......