I'm struggling with what seems to be a very easy problem: how to get seaborn to plot a time series line chart from a pandas dataframe. What am I doing wrong here?
import seaborn as sns
import pandas as pd
df=pd.DataFrame({"Date":["2015-03-03","2015-03-02","2015-03-01"],"Close":[1,3,2]})
df["Date"]=pd.to_datetime(df["Date"])#Not sure if seaborn can parse strings as dates
sns.tsplot(data=df,unit=None, time="Date", value="Close")
I get this traceback:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-306-20e252f661c2> in <module>()
1 df=pd.DataFrame({"Date":["2015-03-03","2015-03-02","2015-03-01"],"Close":[1,3,2]})
2 df["Date"]=pd.to_datetime(df["Date"])
----> 3 sns.tsplot(data=df,unit=None, time="Date", value="Close")
C:\Anaconda\lib\site-packages\seaborn\timeseries.pyc in tsplot(data, time, unit, condition, value, err_style, ci, interpolate, color, estimator, n_boot, err_palette, err_kws, legend, ax, **kwargs)
275 for c, (cond, df_c) in enumerate(data.groupby(condition, sort=False)):
276
--> 277 df_c = df_c.pivot(unit, time, value)
278 x = df_c.columns.values.astype(np.float)
279
C:\Anaconda\lib\site-packages\pandas\core\frame.pyc in pivot(self, index, columns, values)
3507 """
3508 from pandas.core.reshape import pivot
-> 3509 return pivot(self, index=index, columns=columns, values=values)
3510
3511 def stack(self, level=-1, dropna=True):
C:\Anaconda\lib\site-packages\pandas\core\reshape.pyc in pivot(self, index, columns, values)
324 else:
325 indexed = Series(self[values].values,
--> 326 index=MultiIndex.from_arrays([self[index],
327 self[columns]]))
328 return indexed.unstack(columns)
C:\Anaconda\lib\site-packages\pandas\core\frame.pyc in __getitem__(self, key)
1795 return self._getitem_multilevel(key)
1796 else:
-> 1797 return self._getitem_column(key)
1798
1799 def _getitem_column(self, key):
C:\Anaconda\lib\site-packages\pandas\core\frame.pyc in _getitem_column(self, key)
1802 # get column
1803 if self.columns.is_unique:
-> 1804 return self._get_item_cache(key)
1805
1806 # duplicate columns & possible reduce dimensionaility
C:\Anaconda\lib\site-packages\pandas\core\generic.pyc in _get_item_cache(self, item)
1082 res = cache.get(item)
1083 if res is None:
-> 1084 values = self._data.get(item)
1085 res = self._box_item_values(item, values)
1086 cache[item] = res
C:\Anaconda\lib\site-packages\pandas\core\internals.pyc in get(self, item, fastpath)
2858 loc = indexer.item()
2859 else:
-> 2860 raise ValueError("cannot label index with a null key")
2861
2862 return self.iget(loc, fastpath=fastpath)
ValueError: cannot label index with a null key
Unfortunately, I haven't found any answers in the documentation.
Seaborn provides an API on top of Matplotlib that offers sane choices for plot style and color defaults, defines simple high-level functions for common statistical plot types, and integrates with the functionality provided by Pandas DataFrame s.
Seaborn is more comfortable in handling Pandas data frames. It uses basic sets of methods to provide beautiful graphics in python. Matplotlib works efficiently with data frames and arrays.It treats figures and axes as objects. It contains various stateful APIs for plotting.
Factor Plot is used to draw a different types of categorical plot . The default plot that is shown is a point plot, but we can plot other seaborn categorical plots by using of kind parameter, like box plots, violin plots, bar plots, or strip plots.
The tsplot
of seaborn is not meant to plot a simple timeseries line plot, but to plot uncertainties, see:https://stanford.edu/~mwaskom/software/seaborn/generated/seaborn.tsplot.html.
For a line plot, you can simply do
df.set_index('Date').plot()
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