2017-03-23 49 views
1

我有一組笛卡爾座標對,以及每對的二元變量。我正在繪製一個熱圖,在每個bin中,我計算落入該bin的二進制變量爲1的座標的分數。改變海波熱圖的軸

我的問題在於軸。從下圖中可以看出,結果軸是字符串,代表箱邊界。我想這個軸是笛卡爾座標系。有沒有簡單的方法來改變這一點?

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

在[這個答案](http://stackoverflow.com/a/42947766/4124317)你,你已經有了直角座標系中的最後一個問題。你可以更詳細地瞭解最終結果應該是什麼樣子?你想簡單地改變標籤嗎?或者軸縮放? – ImportanceOfBeingErnest

+0

謝謝,的確是同一個應用程序。我想改變軸標尺,不僅是標籤。 – splinter

回答

1

下面通過使用二進制位爲直方圖化作爲圖像的程度產生的標度。

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