Question

Ma question est presque exactement similaire à celle-ci. Cependant , je ne suis pas satisfait des réponses, car je souhaite générer une carte thermique réelle, sans regrouper explicitement les données.

Pour être précis, je voudrais afficher la fonction qui est le résultat d'une convolution entre les données scatter et un noyau personnalisé, tel que 1 / x ^ 2.

Comment dois-je implémenter cela avec matplotlib?

MODIFIER : en gros, ce que j'ai fait est ceci .Le résultat est ici .J'aimerais tout garder, l'axe, le titre, les étiquettes et ainsi de suite.En gros, changez simplement l'intrigue pour qu'elle soit comme je l'ai décrite, tout en réimplémentant le moins possible.

Était-ce utile?

La solution

Convertissez vos données de séries chronologiques en un format numérique avec matplotlib.dats.date2num.Posez une grille rectangulaire qui couvre vos plages x et y et effectuez votre convolution sur ce graphique.Faites un tracé en pseudo-couleur de votre convolution, puis reformatez les x étiquettes en dates.

Le formatage des étiquettes est un peu compliqué, mais assez bien documenté .Il vous suffit de remplacer AutoDateFormatter par DateFormatter et une chaîne de mise en forme appropriée.

Vous devrez modifier les constantes de la convolution de vos données.

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()

Sortie de script

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top