Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Make the size of a heatmap bigger with seaborn

I create a heatmap with seaborn

df1.index = pd.to_datetime(df1.index) df1 = df1.set_index('TIMESTAMP') df1 = df1.resample('30min').mean() ax = sns.heatmap(df1.iloc[:, 1:6:], annot=True, linewidths=.5) 

But the probleme is when there is lot of data in the dataframe the heatmap will be too small and the value inside begin not clear like in the attached image.

How can I change the size of the heatmap to be more bigger ? Thank youenter image description here

EDIT

I try :

df1.index = pd.to_datetime(df1.index) fig, ax = plt.subplots(figsize=(10,10))         # Sample figsize in inches sns.heatmap(df1.iloc[:, 1:6:], annot=True, linewidths=.5, ax=ax) df1 = df1.set_index('TIMESTAMP') df1 = df1.resample('1d').mean() ax = sns.heatmap(df1.iloc[:, 1:6:], annot=True, linewidths=.5) 

But I get this error :

KeyError                                  Traceback (most recent call last) C:\Users\Demonstrator\Anaconda3\lib\site-packages\pandas\indexes\base.py in get_loc(self, key, method, tolerance)    1944             try: -> 1945                 return self._engine.get_loc(key)    1946             except KeyError:  pandas\index.pyx in pandas.index.IndexEngine.get_loc (pandas\index.c:4154)()  pandas\index.pyx in pandas.index.IndexEngine.get_loc (pandas\index.c:4018)()  pandas\hashtable.pyx in pandas.hashtable.PyObjectHashTable.get_item (pandas\hashtable.c:12368)()  pandas\hashtable.pyx in pandas.hashtable.PyObjectHashTable.get_item (pandas\hashtable.c:12322)()  KeyError: 'TIMESTAMP'  During handling of the above exception, another exception occurred:  KeyError                                  Traceback (most recent call last) <ipython-input-779-acaf05718dd8> in <module>()       2 fig, ax = plt.subplots(figsize=(10,10))         # Sample figsize in inches       3 sns.heatmap(df1.iloc[:, 1:6:], annot=True, linewidths=.5, ax=ax) ----> 4 df1 = df1.set_index('TIMESTAMP')       5 df1 = df1.resample('1d').mean()       6 ax = sns.heatmap(df1.iloc[:, 1:6:], annot=True, linewidths=.5)  C:\Users\Demonstrator\Anaconda3\lib\site-packages\pandas\core\frame.py in set_index(self, keys, drop, append, inplace, verify_integrity)    2835                 names.append(None)    2836             else: -> 2837                 level = frame[col]._values    2838                 names.append(col)    2839                 if drop:  C:\Users\Demonstrator\Anaconda3\lib\site-packages\pandas\core\frame.py in __getitem__(self, key)    1995             return self._getitem_multilevel(key)    1996         else: -> 1997             return self._getitem_column(key)    1998     1999     def _getitem_column(self, key):  C:\Users\Demonstrator\Anaconda3\lib\site-packages\pandas\core\frame.py in _getitem_column(self, key)    2002         # get column    2003         if self.columns.is_unique: -> 2004             return self._get_item_cache(key)    2005     2006         # duplicate columns & possible reduce dimensionality  C:\Users\Demonstrator\Anaconda3\lib\site-packages\pandas\core\generic.py in _get_item_cache(self, item)    1348         res = cache.get(item)    1349         if res is None: -> 1350             values = self._data.get(item)    1351             res = self._box_item_values(item, values)    1352             cache[item] = res  C:\Users\Demonstrator\Anaconda3\lib\site-packages\pandas\core\internals.py in get(self, item, fastpath)    3288     3289             if not isnull(item): -> 3290                 loc = self.items.get_loc(item)    3291             else:    3292                 indexer = np.arange(len(self.items))[isnull(self.items)]  C:\Users\Demonstrator\Anaconda3\lib\site-packages\pandas\indexes\base.py in get_loc(self, key, method, tolerance)    1945                 return self._engine.get_loc(key)    1946             except KeyError: -> 1947                 return self._engine.get_loc(self._maybe_cast_indexer(key))    1948     1949         indexer = self.get_indexer([key], method=method, tolerance=tolerance)  pandas\index.pyx in pandas.index.IndexEngine.get_loc (pandas\index.c:4154)()  pandas\index.pyx in pandas.index.IndexEngine.get_loc (pandas\index.c:4018)()  pandas\hashtable.pyx in pandas.hashtable.PyObjectHashTable.get_item (pandas\hashtable.c:12368)()  pandas\hashtable.pyx in pandas.hashtable.PyObjectHashTable.get_item (pandas\hashtable.c:12322)()  KeyError: 'TIMESTAMP' 

EDIT

TypeError                                 Traceback (most recent call last) <ipython-input-890-86bff697504a> in <module>()       2 df2.resample('30min').mean()       3 fig, ax = plt.subplots() ----> 4 ax = sns.heatmap(df2.iloc[:, 1:6:], annot=True, linewidths=.5)       5 ax.set_yticklabels([i.strftime("%Y-%m-%d %H:%M:%S") for i in df2.index], rotation=0)  C:\Users\Demonstrator\Anaconda3\lib\site-packages\seaborn\matrix.py in heatmap(data, vmin, vmax, cmap, center, robust, annot, fmt, annot_kws, linewidths, linecolor, cbar, cbar_kws, cbar_ax, square, ax, xticklabels, yticklabels, mask, **kwargs)     483     plotter = _HeatMapper(data, vmin, vmax, cmap, center, robust, annot, fmt,     484                           annot_kws, cbar, cbar_kws, xticklabels, --> 485                           yticklabels, mask)     486      487     # Add the pcolormesh kwargs here  C:\Users\Demonstrator\Anaconda3\lib\site-packages\seaborn\matrix.py in __init__(self, data, vmin, vmax, cmap, center, robust, annot, fmt, annot_kws, cbar, cbar_kws, xticklabels, yticklabels, mask)     165         # Determine good default values for the colormapping     166         self._determine_cmap_params(plot_data, vmin, vmax, --> 167                                     cmap, center, robust)     168      169         # Sort out the annotations  C:\Users\Demonstrator\Anaconda3\lib\site-packages\seaborn\matrix.py in _determine_cmap_params(self, plot_data, vmin, vmax, cmap, center, robust)     202                                cmap, center, robust):     203         """Use some heuristics to set good defaults for colorbar and range.""" --> 204         calc_data = plot_data.data[~np.isnan(plot_data.data)]     205         if vmin is None:     206             vmin = np.percentile(calc_data, 2) if robust else calc_data.min()  TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe'' 
like image 681
Bio Avatar asked Aug 12 '16 08:08

Bio


People also ask

How do I make my heatmap bigger?

The basic idea is to increase the default figure size in your plotting tool. You need to import matplotlib and set either default figure size or just the current figure size to a bigger one. Also, seaborn is built on top of matplotlib. You need to install and import matplitlib to make the best use of seaborn library.

How do I change font size in SNS heatmap?

Consider calling sns. set(font_scale=1.4) before plotting your data. This will scale all fonts in your legend and on the axes. Of course, adjust the scaling to whatever you feel is a good setting.


2 Answers

You could alter the figsize by passing a tuple showing the width, height parameters you would like to keep.

import matplotlib.pyplot as plt  fig, ax = plt.subplots(figsize=(10,10))         # Sample figsize in inches sns.heatmap(df1.iloc[:, 1:6:], annot=True, linewidths=.5, ax=ax) 

EDIT

I remember answering a similar question of yours where you had to set the index as TIMESTAMP. So, you could then do something like below:

df = df.set_index('TIMESTAMP') df.resample('30min').mean() fig, ax = plt.subplots() ax = sns.heatmap(df.iloc[:, 1:6:], annot=True, linewidths=.5) ax.set_yticklabels([i.strftime("%Y-%m-%d %H:%M:%S") for i in df.index], rotation=0) 

For the head of the dataframe you posted, the plot would look like:

enter image description here

like image 166
Nickil Maveli Avatar answered Sep 20 '22 14:09

Nickil Maveli


add plt.figure(figsize=(16,5)) before the sns.heatmap and play around with the figsize numbers till you get the desired size

...  plt.figure(figsize = (16,5))  ax = sns.heatmap(df1.iloc[:, 1:6:], annot=True, linewidths=.5) 
like image 27
Sam Komo Avatar answered Sep 18 '22 14:09

Sam Komo