How to decrease resolution of xticks when showing clock

Labels on the x-axis show the time in hours of the day. Whenever I get closer to the plot, they look silly with six decimal places at 0. I'm not interested in showing microseconds at all.

See the xticks shortcuts before the increase: enter image description here

After scaling: enter image description here

Here's what I have today:

ax_average.xaxis_date()
fig_average.autofmt_xdate()
fig_average.tight_layout()

      

How can I make sure that only seconds (or even best minutes) are displayed on the labels?


Here's a slightly smaller version of the code shown above:

# Requires python-matplotlib
import numpy
from pylab import *

raw_data = [
'Apr 20 12:14:36 a b temp_0 = 21.400000',
'Apr 20 12:14:36 a b temp_1 = 17.860000',
'Apr 20 12:14:36 a b temp_3 = 50.350006',
'Apr 20 12:14:51 a b temp_0 = 21.400000',
'Apr 20 12:14:51 a b temp_1 = 17.860000',
'Apr 20 12:14:51 a b temp_3 = 50.350006',
'Apr 20 12:15:06 a b temp_0 = 21.400000',
'Apr 20 12:15:06 a b temp_1 = 17.860000',
'Apr 20 12:15:06 a b temp_3 = 50.250000',
'Apr 20 12:15:21 a b temp_0 = 21.400000',
'Apr 20 12:15:21 a b temp_1 = 17.860000',
'Apr 20 12:15:21 a b temp_3 = 50.250000']

def month_string_to_int(input):
    if (input == 'Jan'):
        return 1
    elif (input == 'Feb'):
        return 2
    elif (input == 'Mar'):
        return 3
    elif (input == 'Apr'):
        return 4
    elif (input == 'May'):
        return 5
    elif (input == 'Jun'):
        return 6
    elif (input == 'Jul'):
        return 7
    elif (input == 'Aug'):
        return 8
    elif (input == 'Sep'):
        return 9
    elif (input == 'Oct'):
        return 10
    elif (input == 'Nov'):
        return 11
    elif (input == 'Dev'):
        return 12
    else:
        print "Error in the month string: %s" % input
        return -1

data = {}
timestamps = {}
for line in raw_data:
    line = line.strip() # strip newline character
    lst = line.split()  # space as separator

    day = datetime.date(2015, month_string_to_int(lst[0]), int(lst[1]))
    time = datetime.datetime.strptime(lst[2], "%H:%M:%S").time()
    timestamp = datetime.datetime.combine(day, time)

    identifier = lst[5]
    value = float(lst[7])

    if identifier not in data:
        data[identifier] = []
        timestamps[identifier] = []

    data[identifier].append(value)
    timestamps[identifier].append(timestamp)

fig, ax = subplots()
plot(timestamps['temp_0'], data['temp_0'])

ax.xaxis_date()
fig.autofmt_xdate()
fig.tight_layout()

show()

      

The dictionary timestamps

looks like what I expect:

In [103]: timestamps
Out[103]: 
{'temp_0': [datetime.datetime(2015, 4, 20, 12, 14, 36),
  datetime.datetime(2015, 4, 20, 12, 14, 51),
  datetime.datetime(2015, 4, 20, 12, 15, 6),
  datetime.datetime(2015, 4, 20, 12, 15, 21)],
 'temp_1': [datetime.datetime(2015, 4, 20, 12, 14, 36),
  datetime.datetime(2015, 4, 20, 12, 14, 51),
  datetime.datetime(2015, 4, 20, 12, 15, 6),
  datetime.datetime(2015, 4, 20, 12, 15, 21)],
 'temp_3': [datetime.datetime(2015, 4, 20, 12, 14, 36),
  datetime.datetime(2015, 4, 20, 12, 14, 51),
  datetime.datetime(2015, 4, 20, 12, 15, 6),
  datetime.datetime(2015, 4, 20, 12, 15, 21)]}

      

The xticks labels look like this:

enter image description here

+3


source to share


1 answer


I finally found this:

ax.xaxis.set_major_formatter(DateFormatter('%H:%M'))

      

here .




Better yet, as the above solution no longer displays the days when zoomed out:

from matplotlib.dates import AutoDateFormatter, AutoDateLocator

xtick_locator = AutoDateLocator()
xtick_formatter = AutoDateFormatter(xtick_locator)
xtick_formatter.scaled[30.] = '%d %b'
xtick_formatter.scaled[1.] = '%d %b'
xtick_formatter.scaled[1/24.] = '%d/%m %H:%M'
xtick_formatter.scaled[1/(24.*60.)] = '%d/%m %H:%M'
xtick_formatter.scaled[1/(24.*60.*60.)] = '%d/%m %H:%M:%S'
ax_av.xaxis.set_major_locator(xtick_locator)
ax_av.xaxis.set_major_formatter(xtick_formatter)

      

This helped a lot (although the no-argument example for AutoDateFormatter

doesn't work for me)

+4


source







All Articles