Hello,
As was suggested by Jae-Joon, I have simplified the code for easier investigation and run. The aim of the script is to have time represented on both bottom and top x-axes, on the bottom in seconds-from-midnight (SFM), and the top should show as HH:MM:SS, while there is two different data source being used for y-axes. The code could be seen here or from http://code.google.com/p/ccnworks/source/browse/trunk/double_time.py
Currently something wrong with the scaling, since the right y-axis data is missing on the plotting area. Also, sfm hasn’t been converted to HH:MM:SS. adding this: par.xaxis.set_major_formatter(DateFormatter(’%H:%M:%S’)) doesn’t remedy the situation as of yet.
All comments are welcome.
BEGIN CODE
#!/usr/bin/env python
“”"
Double time representation. Bottom x-axis shows time in seconds-from-midnight
(sfm) fashion, whereas the top x-axis uses HH:MM:SS representation.
Initially written by Gokhan Sever with helps from Jae-Joon Lee.
Written: 2009-09-27
“”"
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.transforms as mtransforms
from mpl_toolkits.axes_grid.parasite_axes import SubplotHost
Prepare some random data and time for seconds-from-midnight (sfm) representation
ydata1 = np.random.random(100) * 1000
ydata2 = np.ones(100) / 2.
time = np.arange(3550, 3650)
fig = plt.figure()
host = SubplotHost(fig, 111)
fig.add_subplot(host)
This is the heart of the example. We have to scale the axes correctly.
aux_trans = mtransforms.Affine2D().translate(0., 0.).scale(3600, ydata1.max())
par = host.twin(aux_trans)
host.set_xlabel(“Time [sfm]”)
host.set_ylabel(“Random Data 1”)
par.set_ylabel(“Random Data 2”)
par.axis[“right”].label.set_visible(True)
p1, = host.plot(time, ydata1)
p2, = par.plot(time, ydata2)
host.axis[“left”].label.set_color(p1.get_color())
par.axis[“right”].label.set_color(p2.get_color())
host.axis[“bottom”].label.set_size(16)
host.axis[“left”].label.set_size(16)
par.axis[“right”].label.set_size(16)
Move the title little upwards so it won’t overlap with the ticklabels
title = plt.title(“Double time: SFM and HH:MM:SS”, fontsize=18)
title.set_position((0.5, 1.05))
plt.show()
END CODE
···
–
Gökhan