与numpy arang在一起

2024-10-01 04:46:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创建一个10的幂数组作为绘图的y轴的标签。 我正在使用导入为plt的matplotlib的plt.yticks(),但这在这里并不重要。 我绘制了y轴从1e3到1e15的曲线图。那是对数图。 Matplotlib会自动显示那些带有1e2步的记号,我希望将步长改为10(以便能够正确地使用minortick)。在

我想如前所述使用plt.yticks(numpy.arange(1e3, 1e15, 10))命令,但是numpy.arange(1e3, 1e15, 10)会导致内存错误。它不是应该输出长度为13的数组吗?为什么记忆会变满?在

如何克服这个问题而不手动构建阵列?在

我也尝试过使用内置的range,但它不能用于float。在

谢谢。在


Tags: numpy绘图matplotlib绘制对数plt标签数组
3条回答

你也可以这样做:

10. ** np.arange(3,16)

小数点很重要,因为没有它,您将溢出整数的默认int32数据类型

另一种方法不是显式地定义记号位置,而是使用^{}模块中的^{},并手动增加刻度数(默认情况下,它将尝试设置一个漂亮的刻度数;也就是说,这样看起来不会太狭窄)。在

在这个例子中,我将右边的Axes上的节拍数设置为13(使用numticks=13),您可以看到这增加了节拍数,因此每个10的整数次幂都有一个。在

import matplotlib.pyplot as plt
import matplotlib.ticker as ticker

# Create figure and axes
fig, (ax1, ax2) = plt.subplots(ncols=2)

# Make yscale logarithmic
ax1.set_yscale('log')
ax2.set_yscale('log')

# Set y limits
ax1.set_ylim(1e3, 1e15)
ax2.set_ylim(1e3, 1e15)

# On ax2, lets tell the locator how many ticks we want
ax2.yaxis.set_major_locator(ticker.LogLocator(numticks=13))

ax1.set_title('default ticks')
ax2.set_title('LogLocator with numticks=13')

plt.show()

enter image description here

编辑:

要用这个方法添加次要刻度,我们可以使用另一个LogLocator,这次设置subs选项来说明我们希望在每个十年中的哪个位置使用小记号。这里我没有在每0.1设置一个小刻度,因为它太窄了,所以只对一个子集进行设置。注意,如果像这样设置小刻度,还需要使用NullFormatter关闭次要刻度的刻度标签。在

^{pr2}$

enter image description here

NumPy尝试logspace作为

plt.yticks(numpy.logspace(3, 15, 13))

这里给出起始指数和最后一个指数(10的幂次)以及其间的数据点数。如果打印上面的网格,将得到以下结果

^{pr2}$

相关问题 更多 >