2015-01-16 45 views
-2

enter image description here我試圖創建一個具有以下部件一個情節:在matplotlib誤差條數圖不起作用

  1. 散點圖
  2. 與誤差條最佳擬合線。
  3. Y縮放爲日誌。

所以這是一個標準的對數線性圖保存到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

請提供範例'x','y','m'和'c'。 – Ffisegydd

+1

您不能在對數刻度中使用負數,而「c-m」爲負數。實際上有點;)你在'ylim'中設置你的下限爲1 – hitzg

+0

@hitzg我期待着matplotlib能夠處理這個問題並且繪製它的可能性,但是這一定是把扳手扔在作品中的問題。 Duhh! – disruptive

回答

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

+0

我仍然無法獲得錯誤欄的工作。錯誤欄只是部分出來。例如,我只是其中一個鬍鬚,沒有與該點相關的垂直線。 – disruptive

+0

請添加一個你得到你的問題的數字。 – hitzg