Skipole WSGI generator.
Ensure your virtual environment has:
pip install matplotlib numpy skipole
Create a directory, and move to it, then create a skipole project "myproj", note the trailing space dot, for current directory.
python -m skilift myproj .
which creates the file myproj.py in your current directory.
Edit the start of your myproj.py file to include the imports:
from io import StringIO from matplotlib.figure import Figure import numpy as np
Run the project and use skiadmin to create a SubmitIterator responder, with a name such as 'chart.svg', and set with a submit_list string 'matplotlib'. Calling this from the browser will call your submit_data function which should return a binary iterator.
So a submit_data function such as this will do the job:
def submit_data(skicall):
"""This function is called by Responders"""
if skicall.submit_list[0] == 'matplotlib':
# Generate the svg figure
fig = Figure()
ax = fig.subplots()
# create a plot, this example from the matplotlib website
x = np.linspace(0, 2, 100)
ax.plot(x, x, label='linear') # Plot some data on the axes.
ax.plot(x, x**2, label='quadratic') # Plot more data on the axes...
ax.plot(x, x**3, label='cubic') # ... and some more.
ax.set_xlabel('x label') # Add an x-label to the axes.
ax.set_ylabel('y label') # Add a y-label to the axes.
ax.set_title("Simple Plot") # Add a title to the axes.
ax.legend() # Add a legend.
# Save it to a temporary string buffer.
with StringIO() as figfile:
fig.savefig(figfile, format="svg")
figdata = figfile.getvalue()
pd = PageData()
pd.mimetype = 'image/svg+xml'
skicall.update(pd)
return [figdata.encode('utf-8')]
The code string produced in variable figdata is encoded as utf-8, and set into a list. When chart.svg is called, this submit_data function returns the svg code and the image is served to the client.