matplotlib中具有零值的Logscale图*具有负指数*

时间:2018-11-12 18:39:41

标签: python matplotlib

这个问题与that one高度相关。

我正在尝试绘制x轴为

的图形

[0] + [2**(x-4) for x in xrange(8)]

另一个问题的答案允许matplotlib具有[0, 2**(0), 2**(1), 2**(2), 2**(3)]的轴,但不会增加负幂。

基本上,我想要一个2**(-5)的另一点的对数刻度图(放置在x=0将为水平的位置)。

有什么想法吗?

enter image description here

1 个答案:

答案 0 :(得分:1)

您可以使用matplotlib的loglog对其进行绘制。这是一个基本示例:

import numpy as np
import matplotlib.pyplot as plt

x = np.array([0] + [2**(x-4) for x in range(8)])
f = lambda x: 10**x

plt.loglog(x, f(x), basex=2, basey=10)

如您所见,您可以分别传递x和y基数,它也给出2**(-1)...

以下是示例图片:

plot

我不知道我是否理解您问题的第二部分。

编辑,我想我现在可能会明白。由于不可能在对数刻度上设置0,因此这是一种符号方法:

在您的比例尺上,x轴上的最小数字为2**(-4),因此我将2**(-5)用作符号零,并相应地重命名了刻度。这是通过xticks完成的:

plt.xticks([2**i for i in range(-5,4)], [r"0"] + [r"$2^{%d}$" %(int(i)) for i in range(-4,4)])

第一个参数[2**i for i in range(-5,4)]创建刻度线的位置,第二个参数创建标签的位置。

现在看起来像这样:

plot2

请记住:这里的“零”实际上是2**(-5)