I'm plotting the error vs. number of iterations for three different algorithms. They take a different number of iterations to compute, so the arrays are of different length. Yet I want to plot all three lines on the same plot. Currently, I get this error when I use the following code:
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()
The error:
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
Thanks to @ibizaman's answer, I made this plot:
If I'm not mistaken, using plot like you did plots 3 graphs with, for each, ks
as x and bgd_costs
, sgd_costs
and mbgd_costs
as 3 different y.
You obviously need x and y to have the same length and like you and the error says, it's not the case.
To make it work, you could add a "hold" and a split the display of the plots:
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()
Note the different x axes.
If you don't add a hold, every plot will erase the figure first.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With