首页 > 解决方案 > 如何扩展 ln(x) 图的非对数 x 轴

问题描述

我想计算几个函数,包括从ln(x)1 到 10 的间隔。但是,我想在. 到目前为止,我无法根据需要修改刻度,标签遵循我的大小而不是自身的值:xx[-1, 10]ln(x)x

axiss = np.linspace(-1,10,12)
x = np.linspace(-1, 10, 1002)
s = int(np.where(x == 1)[0])

fig, ax = plt.subplots()

ax.plot(np.log(x[s:-1]), label='ln(x)')
ax.plot(1/x[s:-1], label='1/x')
ax.plot(-1/(x[s:-1]**2), label='-1/x2')
ax.plot(2/(x[s:-1]**3), label='2/x3')
ax.legend()

ax.set_xlim(-100, 1000)
ax.set_xticklabels(axiss)

如何为我的 x 轴定义一个范围,但只计算其中一部分的函数?

我试过:

ax.plot(x, np.log(x[s:-1]), label='ln(x)')

但当然我有一个长度问题。

谢谢 !

ps:是的,我已经在网上搜索了方法,问这里是我最后的手段

标签: pythonmatplotlibplot

解决方案


您可以明确地将 x 和 y 列表都提供给 matplotlib。这也避免了手动设置 xtick 标签的需要。

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-1, 10, 1001)  # don't divide by 0.0
x_for_ln = np.linspace(0.001, 10, 1001)

fig, ax = plt.subplots()

ax.plot(x_for_ln, np.log(x_for_ln), label='ln(x)')
ax.plot(x, 1/x, label='1/x')
ax.plot(x, -1/(x**2), label='-1/x2')
ax.plot(x, 2/(x**3), label='2/x3')
ax.legend()
ax.set_ylim(-10, 10)

代码生成的绘图


推荐阅读