我的問題與this one幾乎完全相似。 但是,我不滿意答案,因爲我想生成一個實際的熱圖,而沒有明確地裝箱數據。使用散點數據集在MatPlotLib中生成熱圖
準確地說,我想顯示散點圖數據和自定義內核(如1/x^2)之間卷積結果的函數。
我該如何使用matplotlib實現這個功能?
編輯:基本上,我所做的是this。結果是here。我想保留所有內容,軸,標題,標籤等。基本上只是改變情節,就像我描述的那樣,而儘可能少地重新實施。
我的問題與this one幾乎完全相似。 但是,我不滿意答案,因爲我想生成一個實際的熱圖,而沒有明確地裝箱數據。使用散點數據集在MatPlotLib中生成熱圖
準確地說,我想顯示散點圖數據和自定義內核(如1/x^2)之間卷積結果的函數。
我該如何使用matplotlib實現這個功能?
編輯:基本上,我所做的是this。結果是here。我想保留所有內容,軸,標題,標籤等。基本上只是改變情節,就像我描述的那樣,而儘可能少地重新實施。
使用matplotlib.dats.date2num將您的時間序列數據轉換爲數字格式。放下一個跨越你的x和y範圍的矩形網格,並對該圖進行卷積。製作卷積的僞彩色圖,然後將x標籤重新格式化爲日期。
標籤格式有點雜亂,但相當好documented。你只需要用DateFormatter和一個合適的格式化字符串替換AutoDateFormatter。
你需要調整數據卷積中的常量。
import numpy as np
import datetime as dt
import pylab as plt
import matplotlib.dates as dates
t0 = dt.date.today()
t1 = t0+dt.timedelta(days=10)
times = np.linspace(dates.date2num(t0), dates.date2num(t1), 10)
dt = times[-1]-times[0]
price = 100 - (times-times.mean())**2
dp = price.max() - price.min()
volume = np.linspace(1, 100, 10)
tgrid = np.linspace(times.min(), times.max(), 100)
pgrid = np.linspace(70, 110, 100)
tgrid, pgrid = np.meshgrid(tgrid, pgrid)
heat = np.zeros_like(tgrid)
for t,p,v in zip(times, price, volume):
delt = (t-tgrid)**2
delp = (p-pgrid)**2
heat += v/(delt + delp*1.e-2 + 5.e-1)**2
fig = plt.figure()
ax = fig.add_subplot(111)
ax.pcolormesh(tgrid, pgrid, heat, cmap='gist_heat_r')
plt.scatter(times, price, volume, marker='x')
locator = dates.DayLocator()
ax.xaxis.set_major_locator(locator)
ax.xaxis.set_major_formatter(dates.AutoDateFormatter(locator))
fig.autofmt_xdate()
plt.show()
非常感謝您的回答!我只關心你的答案:我如何保持我當前版本中的好軸標籤? (請參閱我的編輯) –
我會將時間序列數據轉換爲數字表示形式,例如datetime.date.today()。toordinal()或matplotlib.dates.date2num()。 pcolormesh()。然後弄清楚如何格式化x標籤。這最後一部分讓我難住了。 – matt
非常感謝您的詳細解答! –
你想指導或實際的代碼?你試過什麼了? – Trufa
你看過'scipy.stats.gaussian_kde'嗎? http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.gaussian_kde.html它確實是你想要的。 (雖然它使用'exp(-x)'而不是'1/x^2')。你需要定製它來使用高斯內核以外的東西,但這並不難。 –
@Trufa:查看我的編輯。 –