函数图象——在对数坐标系中绘制函数图象
本文记述了用 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)。图象显示结果如下:
完整的代码请参考 [gitee] cnblogs/18388561 。
更多例子请参考 函数图象、数据可视化 和 Matplotlib Gallery。
受限于作者的水平,读者如发现有任何错误或有疑问之处,请追加评论或发邮件联系 green-pi@qq.com。作者将在收到意见后的第一时间里予以回复。 本文来自博客园,作者:green-cnblogs,转载请注明原文链接:https://www.cnblogs.com/green-cnblogs/p/18388561 谢谢!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器