Time series plotting using hvPlot
Default time series plotting
Suppose df is a pandas DataFrame having a time series index and columns of 'kion' and 'sped', which are actually a dataset of air temperature and wind speed at Chiba Observatory, Japan, provided by Japan Meteorological Agency.
import hvplot.pandas
df[['kion','sped']].hvplot()
Customized plotting
Now one column of 'kion' is selected for simplicity. Basically plotting can be customized by setting arguments of hvPlot, but some options originally from Bokeh cannot be customized. In that case, Bokeh's options can be customized by defining a function of hook(plot, element)
as follows:
Definition of function hook
def hook(plot, element):
plot.handles['xaxis'].axis_label_text_font_style = 'normal'
plot.handles['yaxis'].axis_label_text_font_style = 'normal'
In this example, the function hook changes the text font style of labels in x-axis and y-axis to normal (default is slanted). The hook function is invoked by df['kion'].hvplot().opts(hooks=[hook])
. Parameters in the function hook are defined in Bokeh.
Customized time series plotting
The following is an example. xlim
is x-axis range, xticks
is the approximate number of major ticks in x-axis, ylabel
is the title of y-axis, title
is the title of the graph, width
is the width of the figure in pixel, including legends, etc. (thus difficult to adjust the aspect ratio), height
is the height of the figure in pixel, line_color
is the line color, line_width
is the line width, fontsize={'xticks':12, 'yticks': 12, 'ylabel':14}
is the font size for each item in dictionary with items in keys and font sizes in values. In this example, x-axis label font size is 12pt, y-axis label font size is 12pt, and y-axis title font size is 14pt. The last .opts(hooks=[hook])
is to customized other options defined in Bokeh. The range xlim
of time series index should be given in pandas.datetime().
df['kion'].hvplot(xlim=(pd.datetime(1991,1,2), pd.datetime(1991,3,4)),\
xticks=10,\
ylabel='Temperature (degC)', ylim=(-4,35), yticks=10,\
width=600, height=200,\
line_color='red', line_width=0.5,\
fontsize={'xticks':12,'yticks':12 ,'ylabel':14},\
title='').opts(hooks=[hook])