You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在背景图像上绘制带对数刻度的曲线图?

解决对数刻度轴上背景图像拉伸问题

问题原因

你代码里用twinx()创建了共享x轴但y轴为线性的副轴,背景图像绘制在这个线性y轴的轴上,而主轴是对数y轴,两者的坐标映射逻辑完全不同,导致图像被错误拉伸。

解决方案

移除双轴,直接在同一个对数刻度轴上绘制背景图像和曲线,让图像的坐标范围匹配对数轴的映射:

import numpy as np
import matplotlib.pyplot as plt

x = np.random.uniform(low=0, high=10**6, size=(100,)) 
y = np.random.uniform(low=10**(-14), high=10**(-10), size=(100,)) 

x.sort() 
y.sort()

img = plt.imread("quiverplot.png")

fig, ax = plt.subplots() 

# 先绘制背景图像,zorder设为0确保在底层
ax.imshow(img, zorder=0, 
          extent=[x.min(), x.max(), y.min(), y.max()], 
          aspect='auto', 
          origin='lower')

# 绘制曲线,zorder设为1确保在图像上方
ax.plot(x, y, zorder=1) 

# 设置对数刻度
ax.set_xscale('log')
ax.set_yscale('log')

fig.tight_layout() 
plt.show() 

关键改动说明

  • 移除twinx()创建的副轴,避免线性轴和对数轴的坐标冲突
  • 先绘制背景图像再绘制曲线,通过zorder控制图层顺序
  • 添加origin='lower':imshow默认以图像左上角对应数据范围的左下角,该参数修正方向,让图像与数据轴方向一致
  • aspect='auto':让图像自适应坐标轴的比例,避免强制等比例导致的变形

内容的提问来源于stack exchange,提问作者Samael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 18:50:28