2017-03-23 2 views
1

Ich habe eine Reihe von kartesischen Koordinatenpaaren, zusammen mit einer binären Variablen für jedes der Paare. Ich zeichne eine Heatmap, in der ich in jedem Bin den Anteil der Koordinaten errechne, die in dieses Bin fallen, wo die binäre Variable 1 ist.Ändern der Achse einer Seaborn Heatmap

Mein Problem ist mit der Achse. Wie in der folgenden Abbildung zu sehen ist, handelt es sich bei der resultierenden Achse um Zeichenfolgen, die für Fachgrenzen stehen. Ich möchte, dass die Achse kartesische Koordinaten ist. Gibt es eine einfache Möglichkeit, dies zu ändern?

import numpy as np 
import pandas as pd 
import seaborn as sb 
np.random.seed(0) 
x = np.random.uniform(0,100, size=200) 
y = np.random.uniform(0,100, size=200) 
z = np.random.choice([True, False], size=200, p=[0.3, 0.7]) 
df = pd.DataFrame({"x" : x, "y" : y, "z":z}) 
binsx = 8 
binsy = 5 
res = df.groupby([pd.cut(df.y, binsy),pd.cut(df.x,binsx)])['z'].mean().unstack() 
ax = sb.heatmap(res) 
ax.axis('equal') 
ax.invert_yaxis() 

enter image description here

+0

In [diese Antwort] (http://stackoverflow.com/a/42947766/4124317) zu Ihrer letzten Frage, die Sie bereits kartesischen Koordinaten haben. Kannst du näher ins Detail gehen, wie das Endergebnis aussehen sollte? Willst du die Ticklabels einfach ändern? Oder die Achsenskalierung? – ImportanceOfBeingErnest

+0

Danke, in der Tat ist es die gleiche Anwendung. Ich möchte die Achsenskalen ändern, nicht nur die Ticklabels. – splinter

Antwort

1

Nachfolgend schafft eine Skala durch die Behälter unter Verwendung als die Ausmaße des Bildes für Histogramm.

import numpy as np 
import pandas as pd 
import seaborn as sns 
import matplotlib.pyplot as plt 

np.random.seed(0) 
x = np.random.uniform(0,100, size=200) 
y = np.random.uniform(0,100, size=200) 
z = np.random.choice([True, False], size=200, p=[0.3, 0.7]) 
df = pd.DataFrame({"x" : x, "y" : y, "z":z}) 
binsx = np.arange(0,112.5,12.5) 
binsy = np.arange(0,120,20) 
res = df.groupby([pd.cut(df.y, binsy),pd.cut(df.x,binsx)])['z'].mean().unstack() 

plt.imshow(res, cmap=plt.cm.Reds, 
      extent=[binsx.min(), binsx.max(),binsy.min(),binsy.max()]) 
plt.xticks(binsx) 
plt.yticks(binsy) 
plt.colorbar() 
plt.grid(False) 


plt.show() 

enter image description here

Verwandte Themen