は、bins=1
に設定されて解決されます。
しかし、それはmatplotlibののhist()
に内部関数によってトリガされます別のエラー、ValueError: x must be 1D or 2D
を暴く、_normalize_input()
と呼ばれる:
import pandas as pd
import seaborn as sns
df = pd.DataFrame(['Tue','Feb',7,'15:37:58',2017,15.6196]).T
df.columns = ['Day','Month','Date','Time','Year','floatTime']
sns.distplot(df.floatTime, bins=1)
出力:
ValueError Traceback (most recent call last)
<ipython-input-25-858df405d200> in <module>()
6 df.columns = ['Day','Month','Date','Time','Year','floatTime']
7 df.floatTime.values.astype(float)
----> 8 sns.distplot(df.floatTime, bins=1)
/home/andrew/anaconda3/lib/python3.6/site-packages/seaborn/distributions.py in distplot(a, bins, hist, kde, rug, fit, hist_kws, kde_kws, rug_kws, fit_kws, color, vertical, norm_hist, axlabel, label, ax)
213 hist_color = hist_kws.pop("color", color)
214 ax.hist(a, bins, orientation=orientation,
--> 215 color=hist_color, **hist_kws)
216 if hist_color != color:
217 hist_kws["color"] = hist_color
/home/andrew/anaconda3/lib/python3.6/site-packages/matplotlib/__init__.py in inner(ax, *args, **kwargs)
1890 warnings.warn(msg % (label_namer, func.__name__),
1891 RuntimeWarning, stacklevel=2)
-> 1892 return func(ax, *args, **kwargs)
1893 pre_doc = inner.__doc__
1894 if pre_doc is None:
/home/andrew/anaconda3/lib/python3.6/site-packages/matplotlib/axes/_axes.py in hist(self, x, bins, range, normed, weights, cumulative, bottom, histtype, align, orientation, rwidth, log, color, label, stacked, **kwargs)
6141 x = np.array([[]])
6142 else:
-> 6143 x = _normalize_input(x, 'x')
6144 nx = len(x) # number of datasets
6145
/home/andrew/anaconda3/lib/python3.6/site-packages/matplotlib/axes/_axes.py in _normalize_input(inp, ename)
6080 else:
6081 raise ValueError(
-> 6082 "{ename} must be 1D or 2D".format(ename=ename))
6083 if inp.shape[1] < inp.shape[0]:
6084 warnings.warn(
ValueError: x must be 1D or 2D
_normalize_input()
はmatplotlibのから削除された(それはlooks like sometime last year)、私はSeabornがボンネットの下で古いバージョンを参照していると思います。あなたはthis old commitで_normalize_input()
を見ることができます
:
def _normalize_input(inp, ename='input'):
"""Normalize 1 or 2d input into list of np.ndarray or
a single 2D np.ndarray.
Parameters
----------
inp : iterable
ename : str, optional
Name to use in ValueError if `inp` can not be normalized
"""
if (isinstance(x, np.ndarray) or
not iterable(cbook.safe_first_element(inp))):
# TODO: support masked arrays;
inp = np.asarray(inp)
if inp.ndim == 2:
# 2-D input with columns as datasets; switch to rows
inp = inp.T
elif inp.ndim == 1:
# new view, single row
inp = inp.reshape(1, inp.shape[0])
else:
raise ValueError(
"{ename} must be 1D or 2D".format(ename=ename))
...
でも、私は、なぜinp.ndim!=1
を把握することはできません。期待通りの入力に同じnp.asarray().ndim
を実行すると、1
を返します。
np.asarray(df.floatTime).ndim # 1
あなたはsns.distplot()
と単一値の入力作業を作りたいのであれば、あなたはいくつかの障害に直面しています。
plt.hist(df.floatTime)
:
は(distplot
はKDEと一緒に、とにかくに何が起こっている)単一要素df.floatTime
の回避策
チェックを推奨し、その場合は、だけではなく、plt.hist()
を使用します
なぜ値が1つだけの場合に分布をプロットしたいのですか? – Peaceful
これは月の毎日の多くのサブプロットの1つで、その日はただ1つのエントリしか持たない – Austin
完全なスタックトレースを表示する必要があります。それは、誰か(あるいはあなたが知っている人、おそらくあなたが知っている人)が問題を診断するのに役立つ貴重な情報を含んでいます。 – mwaskom