2014-03-02 155 views
3

我繪製了三種不同算法的誤差與迭代次數的關係。他們需要不同數量的迭代來計算,所以數組的長度不同。然而我想在同一個地塊上繪製所有三條線。繪製不同長度的數組

import matplotlib.pyplot as plt 

plt.plot(ks, bgd_costs, 'b--', sgd_costs, 'g-.', mbgd_costs, 'r') 
plt.title("Blue-- = BGD, Green-. = SGD, Red=MBGD") 
plt.ylabel('Cost') 
plt.xlabel('Number of updates (k)') 
plt.show() 

錯誤:目前,當我使用下面的代碼我得到這個錯誤

plt.plot(ks, bgd_costs, 'b--', sgd_costs, 'g-.', mbgd_costs, 'r') 
    File "/Library/Python/2.7/site-packages/matplotlib-1.4.x-py2.7-macosx-10.9-intel.egg/matplotlib/pyplot.py", line 2995, in plot 
    ret = ax.plot(*args, **kwargs) 
    File "/Library/Python/2.7/site-packages/matplotlib-1.4.x-py2.7-macosx-10.9-intel.egg/matplotlib/axes/_axes.py", line 1331, in plot 
    for line in self._get_lines(*args, **kwargs): 
    File "/Library/Python/2.7/site-packages/matplotlib-1.4.x-py2.7-macosx-10.9-intel.egg/matplotlib/axes/_base.py", line 312, in _grab_next_args 
    for seg in self._plot_args(remaining[:isplit], kwargs): 
    File "/Library/Python/2.7/site-packages/matplotlib-1.4.x-py2.7-macosx-10.9-intel.egg/matplotlib/axes/_base.py", line 281, in _plot_args 
    x, y = self._xy_from_xy(x, y) 
    File "/Library/Python/2.7/site-packages/matplotlib-1.4.x-py2.7-macosx-10.9-intel.egg/matplotlib/axes/_base.py", line 223, in _xy_from_xy 
    raise ValueError("x and y must have same first dimension") 
ValueError: x and y must have same first dimension 

UPDATE

感謝@ ibizaman的答案,我做了這個情節: enter image description here

回答

6

如果我沒有弄錯,像你一樣繪製3張圖, ks as x and bgd_costs,sgd_costs and mbgd_costs as 3 different y。 你顯然需要xy長度和你一樣,錯誤表示,情況並非如此。

要使其工作,你可以添加一個「持有」和分裂陰謀的顯示:

import matplotlib.pyplot as plt 

plt.hold(True) 
plt.plot(bgds, bgd_costs, 'b--') 
plt.plot(sgds, sgd_costs, 'g-.') 
plt.plot(mgbds, mbgd_costs, 'r') 
plt.title("Blue-- = BGD, Green-. = SGD, Red=MBGD") 
plt.ylabel('Cost') 
plt.xlabel('Number of updates (k)') 
plt.show() 

注意不同X軸。

如果不添加保留,則每個圖都會先刪除該圖。