Closed
Description
import pandas as pd
import matplotlib.pyplot as plt
ser_1 = pd.Series(data=[1, 2, 2, 3, 3, 4, 4, 4, 4, 5])
ser_2 = ser_1.iloc[1:]
fig, axes = plt.subplots(1, 4, figsize=(16, 4))
axes[0].hist(ser_1.values)
axes[1].hist(ser_1)
axes[2].hist(ser_2.values)
axes[3].hist(ser_2)
This snippet correctly plots in the first three cases, but errors in the last case, saying (in the relevant part):
/venv/local/lib/python2.7/site-packages/matplotlib/axes/_axes.pyc
in hist(self, x, bins, range, normed, weights, cumulative, bottom, histtype,
align, orientation, rwidth, log, color, label, stacked, **kwargs)
5602 # Massage 'x' for processing.
5603 # NOTE: Be sure any changes here is also done below to 'weights'
-> 5604 if isinstance(x, np.ndarray) or not iterable(x[0]):
5605 # TODO: support masked arrays;
5606 x = np.asarray(x)
(which then descends into a KeyError in the bowels of pandas).
So seems like the issue here is that x[0]
is being used to find the first element of the input data (which would work fine if the input data is a numpy.ndarray
). But in this case x
is a pandas.Series
and as a result x[0]
is an index lookup rather than a normal slice. This works fine on axes[1]
since in that case the histogrammed series includes 0
in its index. However, on axes[3]
, the histogrammed data no longer includes 0
in the index and things fall apart.