2016-08-12 27 views
7

utworzyć mapę cieplną z SeabornBądź wielkości mapę cieplną większego z 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) 

Ale probleme jest, gdy istnieje wiele danych w dataframe termiczna będzie zbyt mały, a wartość wewnątrz nie rozpocznie jasne jak na załączonym obrazie.

Jak zmienić rozmiar mapy termicznej, aby była większa? Dziękuję enter image description here

EDIT

Staram:

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) 

Ale otrzymuję ten błąd:

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'' 

Odpowiedz

17

Można zmienić figsize, przekazując tuple, pokazując parametry, które chcesz zachować.

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

Pamiętam, odpowiadając na podobne pytanie twój gdzie trzeba było ustawić indeks jako TIMESTAMP. Tak więc, można wtedy zrobić coś jak poniżej:

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) 

Dla head z dataframe pan pisał, fabuła będzie wyglądać następująco:

enter image description here

+1

dziękuję, że to działa. Ostatnie pytanie proszę; jak mogę zmienić format dat TImesStamp. Dodaję tę linię: ax.set_yticklabels ([i.strftime ("% Y-% m-% d% H:% M:% S") dla i w df1.TIMESTAMP], obrót = 0), ale to nie działa ! – Bio

+1

@Bio: Proszę spojrzeć na moją zredagowaną odpowiedź. –

+0

Proszę spojrzeć na mój zredagowany post. Wielkie dzięki – Bio

1

fmt: string, opcjonalnie Kod formatowania ciągów znaków używany przy dodawaniu adnotacji

Pochodzenie: Seaborn docs

Dodaj parametr FMT z d, aby pokazać ją jako liczbę całkowitą

ax = sns.heatmap(df1.iloc[:, 1:6:], annot=True, linewidths=.5, fmt="d") 
2

dodać plt.figure(figsize=(16,5)) przed sns.heatmap i bawić z numerami figsize aż pojawi się żądany rozmiar

... 

plt.figure(figsize = (16,5)) 

ax = sns.heatmap(df1.iloc[:, 1:6:], annot=True, linewidths=.5) 
+0

o ile mi wiadomo, plt.figure powinien działać na wszystkich działkach seabornów, prawda? Kiedy robię to dla mapy cieplnej, to działa, próbuję tego dla mojego następnego wykresu (który to paropot) i to nie działa. Jak myślisz, co to może być problem? Robię to w notatniku jupytera – deadcode