我正試圖將seaborn的熱圖和kdeplot結合到一個圖中,但到目前為止,結果并不樂觀,因為我找不到使它們重疊的方法。因此,熱圖只是被擠到了圖的左邊。
我認為原因是seaborn似乎不能識別兩個圖表中的x軸是同一個(見下圖),盡管資料點完全相同。唯一的區別是,對于heatmap,我需要對它們進行透視,而對于kdeplot則不需要透視。
因此,軸的資料來自同一個資料集,但形式不同,正如在下面的代碼中可以看到的。
資料集的樣本看起來是這樣的:
X Y Z
7,75 280 52, 73
3,25 340 54, 19
5,75 340 53,61
2,5 180 54, 673 340 53,66
1,75 340 54, 81
4,5 380 55, 18
4 240 56, 49
4,75 380 55, 17
4,25 180 55, 40
2 420 56, 42
2,25 380 54, 90
我的代碼:
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
f, ax = plt.subplots(figsize=(11, 9), dpi=300)
plt.tick_params(bottom='on')
# dataset只是一個帶有資料的pandas框架。
X1 = dataset.iloc[:, :3].pivot("X"/span>, "Y"/span>, "Z"/span>)
X2 = dataset.iloc[:, :2]
ax = sns.heatmap(X1, cmap="Spectral")
ax.invert_yaxis()
ax2 = plt.twinx()
sns.kdeplot(X2.iloc[:, 1], X2.iloc[:, 0], ax=ax2, zorder=2)
ax.axis('tight')
plt.show()
請幫助我將kdeplot放置在熱圖的頂部。理想情況下,我希望我的最終繪圖看起來像這樣:
如果有任何提示或暗示,我們將不勝感激!
uj5u.com熱心網友回復:
這個問題可能有點難以理解,因為資料集不可能是 "只是一些資料"。 X和Y值需要位于一個非常規則的網格上。沒有X,Y組合可以重復,但不是所有的值都出現。然后kdeplot將顯示X,Y的使用值集中在哪里。
這樣的資料集可以通過首先生成全網格的虛擬資料來模擬,然后再取一個子集。
現在,一個海量的資料集可以被用來模擬。
現在,海生熱圖使用分類的X和Y軸。這種軸很難與kdeplot對齊。 為了獲得一個類似的帶有數字軸的熱圖,可以使用ax.pcolor()。
from matplotlib import pyplotas plt
import seaborn as sns
import pandas as pd
import numpy as np
xs = np.range(2, 10, 0.25)
ys = np.arange(150, 400, 10)
#首先在一個完整的網格上創建一個虛擬資料集。
dataset = pd.DataFrame({'X': np.repeater(xs, len(ys)),
'Y': np.tile(ys, len(xs))。
'Z': np.random.uniform(50, 60, len(xs) * len(ys)) })
#取一個隨機的行子集。
dataset = dataset.sample(200)
fig, ax = plt.subplots(figsize=(11, 9), dpi=300)
X1 = dataset.pivot("X"/span>, "Y"/span>, "Z"/span>)
collection = ax.pcolor(X1.columns, X1.index, X1, shading='nearest', cmap="Spectral")
plt.colorbar(collection, ax=ax, pad=0.02)
# default, cut=3, which causes a lot of surrounding whitespace[/span].
sns.kdeplot(x=資料集["Y"/span>], y=資料集["X"/span>], cut=1.5, ax=ax)
fig.tight_layout()
plt.show()
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/329075.html
標籤:
上一篇:Matplotlib的barhcapstyle'round'不作業?
下一篇:統一性。在本地空間實體化物件



