如何在对数坐标轴下使用axline绘制直线?
问题与解决方法
问题
线性刻度下,用axline绘制过原点的直线能正常显示:
fig, ax = plt.subplots() l2 = ax.axline(xy1=(0, 0), slope=0.3) ax.set_xlim(0.1, 10) ax.set_ylim(0.1, 10)
但切换为对数刻度后,绘图区域为空:
fig, ax = plt.subplots() l2 = ax.axline(xy1=(0, 0), slope=0.3) ax.set_xlim(0.1, 10) ax.set_ylim(0.1, 10) ax.set_xscale('log') ax.set_yscale('log')
原因
对数坐标中0没有定义(log(0)无意义),axline以(0,0)为起点,无法在对数刻度下渲染这条直线。
解决方案
方法1:用对数范围内的点定义直线
选择坐标轴有效范围内的点(比如(1, 0.3))作为起点,保持斜率不变:
fig, ax = plt.subplots() # 使用对数刻度有效区间内的点 l2 = ax.axline(xy1=(1, 0.3), slope=0.3) ax.set_xlim(0.1, 10) ax.set_ylim(0.1, 10) ax.set_xscale('log') ax.set_yscale('log')
方法2:用plot函数生成数据绘制
生成对数区间的x序列,计算对应y值后绘图:
import numpy as np fig, ax = plt.subplots() # 生成对数范围内的x值 x = np.logspace(np.log10(0.1), np.log10(10), 100) y = 0.3 * x ax.plot(x, y) ax.set_xlim(0.1, 10) ax.set_ylim(0.1, 10) ax.set_xscale('log') ax.set_yscale('log')
内容的提问来源于stack exchange,提问作者zxdawn
相关产品推荐
相关产品推荐

