Generate a heatmap in MatPlotLib using a scatter data set
我的问题几乎与此类似。 但是,我对答案不满意,因为我想生成一个实际的热图,而没有明确地对数据进行分箱。
确切地说,我想显示的功能是散点数据和自定义内核(例如1 / x ^ 2)之间卷积的结果。
我应该如何用matplotlib来实现呢?
编辑:基本上,我所做的就是这个。 结果在这里。 我想保留所有内容,轴,标题,标签等。 基本上只是将情节更改为我所描述的,同时尽可能少地重新实现。
使用matplotlib.dats.date2num将时间序列数据转换为数字格式。 放下一个跨越x和y范围的矩形网格,并在该图上进行卷积。 绘制卷积的伪彩色图,然后将x标签重新格式化为日期。
标签格式有点混乱,但是文档记录得很好。 您只需要用DateFormatter和适当的格式设置字符串替换AutoDateFormatter。
您需要为数据调整卷积中的常量。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | 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() |