matplotlib中带有错误栏的日志图不起作用

时间:2015-01-16 16:01:06

标签: python matplotlib

enter image description here我尝试使用以下组件创建绘图:

  1. 散点图
  2. 最适合误差线的线。
  3. Y缩放为日志。
  4. 所以这是保存到png的标准对数线性图,但是虽然我可以得到散点图,但我无法在图上绘制拟合线。我只得到一个blob。这是我正在使用的代码:

       import matplotlib
        matplotlib.use('Agg')
        import matplotlib.pyplot as plt
        fig = plt.figure()
        ax = fig.add_subplot(111,  xlim=(-2,2), ylim=(1,10E11))
        ax.scatter(x, y, s=1, c='black')
       line, = ax.semilogy([-0.5, 1], [-0.5*m+c, 1.0*m + c], color='red', linestyle='-', linewidth=2)
        ax.errorbar(-0.5, -0.5*m+c, yerr=ser, marker='o', color='red')
        ax.errorbar(1, m * 1.0 + c, yerr=ser, marker='o', color='green')
        ax.set_yscale('log')
        fig.savefig('log.png')
    

    我得到散点图。和对数刻度,但不是拟合线或误差线。

    x = np.array(x)
    y = np.array(y)
    ~50,000 points
    m = gradient = 2.38329162e+09   
    c = 1.24269722e+09
    

    我尝试了很多变化,但我似乎无法正确绘制线条。我找不到带有对数刻度的错误条图的一个示例。

    作为更新,我终于可以使线路正常工作了。这是由于y方向低于零。但是我仍然无法绘制错误条。我只能获得一个胡须线图(不是四个)而没有水平连接线。

    matplotlib版本:1.2.0

1 个答案:

答案 0 :(得分:1)

由于你没有提供任何号码,我不得不猜测。

但是这样可行,所以你的数据可能很奇怪(你放大了看ser是不是真的很小?)

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import numpy as np

x = np.random.rand(500,1)*2 -1
y = np.random.rand(500,1)*1e10

m = gradient = 2.38329162e+09   
c = 1.24269722e+09
ser  = 1e10

fig = plt.figure()
ax = fig.add_subplot(111,  xlim=(-2,2), ylim=(1,10E11))
ax.scatter(x, y, s=1, c='black')
ax.plot([-1, 1], [m * -1.0 + c, 1.0*m + c], color='red', linestyle='-', linewidth=2)
ax.errorbar(-1, m * -1.0 + c, yerr=(ser), marker='o', color='green')
ax.errorbar(1, m * 1.0 + c, yerr=(ser), marker='o', color='green')
ax.set_yscale('log')
fig.savefig('log.png')

结果:

enter image description here