Ho dati per diversi mesi, ma mancano alcuni mesi. Questo sembra abbastanza strano se traccio l'intero set di dati in un grafico (un sacco di spazio vuoto in mezzo). Ho scritto il piccolo script di esempio per mostrare come funziona (basato su: Python/Matplotlib - Is there a way to make a discontinuous axis?)Timeseries discontinua trama con date sull'asse x
Il problema: non riesco a ottenere l'asse x utilizzare la stessa formattazione di data! O l'ascia o l'ascia 2 è corretta, ma mai entrambe. Hai qualche idea?
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import datetime
def getDates(startdate, enddate):
days = (enddate + datetime.timedelta(days=1) - startdate).days
dates = [ startdate + datetime.timedelta(days=x) for x in range(0,days) ]
return dates
dates1 = getDates(datetime.datetime(2013,1,1), datetime.datetime(2013,1,31))
dates2 = getDates(datetime.datetime(2013,3,1), datetime.datetime(2013,3,31))
dates = dates1+dates2
data = np.arange(len(dates))
Locator = mpl.dates.DayLocator(interval=5)
Formatter = mpl.dates.DateFormatter('%d-%m-%y')
fig,(ax,ax2) = plt.subplots(1,2,sharey=True)
fig.subplots_adjust(wspace=0.05)
fig.set_size_inches(10,3)
ax.plot(dates, data)
ax2.plot(dates, data)
ax.legend(loc=1)
ax.set_ylim(0, 61)
ax.set_xlim(datetime.datetime(2013,1,1), datetime.datetime(2013,1,31))
ax2.set_xlim(datetime.datetime(2013,3,1), datetime.datetime(2013,3,31))
labels = ax.get_xticklabels()
for label in labels: label.set_rotation(30)
labels = ax2.get_xticklabels()
for label in labels: label.set_rotation(30)
ax.spines['right'].set_visible(False)
ax2.spines['left'].set_visible(False)
ax.tick_params(right='off')
ax2.tick_params(left='off')
ax2.yaxis.tick_right()
ax.xaxis.set_major_locator(Locator)
ax.xaxis.set_major_formatter(Formatter)
ax2.xaxis.set_major_locator(Locator)
ax2.xaxis.set_major_formatter(Formatter)
plt.savefig("test.png", bbox_inches='tight')
Risultato:
Si prega di non crollare 'for' loop per una linea, è cattivo stile e può confondere i tuoi lettori (come me) – tacaswell