NEW Matplotlib Demos for Web port
This commit is contained in:
parent
5cfc59fe56
commit
5e42607a57
|
@ -0,0 +1,185 @@
|
|||
import PySimpleGUIWeb as sg
|
||||
import numpy as np
|
||||
from matplotlib.backends.backend_tkagg import FigureCanvasAgg
|
||||
import matplotlib.figure
|
||||
import matplotlib.pyplot as plt
|
||||
import io
|
||||
|
||||
|
||||
from matplotlib import cm
|
||||
from mpl_toolkits.mplot3d.axes3d import get_test_data
|
||||
from matplotlib.ticker import NullFormatter # useful for `logit` scale
|
||||
|
||||
|
||||
def create_axis_grid():
|
||||
from mpl_toolkits.axes_grid1.axes_rgb import RGBAxes
|
||||
|
||||
plt.close('all')
|
||||
|
||||
def get_demo_image():
|
||||
# prepare image
|
||||
delta = 0.5
|
||||
|
||||
extent = (-3, 4, -4, 3)
|
||||
x = np.arange(-3.0, 4.001, delta)
|
||||
y = np.arange(-4.0, 3.001, delta)
|
||||
X, Y = np.meshgrid(x, y)
|
||||
Z1 = np.exp(-X ** 2 - Y ** 2)
|
||||
Z2 = np.exp(-(X - 1) ** 2 - (Y - 1) ** 2)
|
||||
Z = (Z1 - Z2) * 2
|
||||
|
||||
return Z, extent
|
||||
|
||||
def get_rgb():
|
||||
Z, extent = get_demo_image()
|
||||
|
||||
Z[Z < 0] = 0.
|
||||
Z = Z / Z.max()
|
||||
|
||||
R = Z[:13, :13]
|
||||
G = Z[2:, 2:]
|
||||
B = Z[:13, 2:]
|
||||
|
||||
return R, G, B
|
||||
|
||||
fig = plt.figure(1)
|
||||
ax = RGBAxes(fig, [0.1, 0.1, 0.8, 0.8])
|
||||
|
||||
r, g, b = get_rgb()
|
||||
kwargs = dict(origin="lower", interpolation="nearest")
|
||||
ax.imshow_rgb(r, g, b, **kwargs)
|
||||
|
||||
ax.RGB.set_xlim(0., 9.5)
|
||||
ax.RGB.set_ylim(0.9, 10.6)
|
||||
|
||||
plt.draw()
|
||||
return plt.gcf()
|
||||
|
||||
|
||||
|
||||
def create_figure():
|
||||
# ------------------------------- START OF YOUR MATPLOTLIB CODE -------------------------------
|
||||
fig = matplotlib.figure.Figure(figsize=(5, 4), dpi=100)
|
||||
t = np.arange(0, 3, .01)
|
||||
fig.add_subplot(111).plot(t, 2 * np.sin(2 * np.pi * t))
|
||||
|
||||
return fig
|
||||
|
||||
|
||||
def create_subplot_3d():
|
||||
|
||||
|
||||
fig = plt.figure()
|
||||
|
||||
ax = fig.add_subplot(1, 2, 1, projection='3d')
|
||||
X = np.arange(-5, 5, 0.25)
|
||||
Y = np.arange(-5, 5, 0.25)
|
||||
X, Y = np.meshgrid(X, Y)
|
||||
R = np.sqrt(X ** 2 + Y ** 2)
|
||||
Z = np.sin(R)
|
||||
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.jet,
|
||||
linewidth=0, antialiased=False)
|
||||
ax.set_zlim3d(-1.01, 1.01)
|
||||
|
||||
fig.colorbar(surf, shrink=0.5, aspect=5)
|
||||
|
||||
ax = fig.add_subplot(1, 2, 2, projection='3d')
|
||||
X, Y, Z = get_test_data(0.05)
|
||||
ax.plot_wireframe(X, Y, Z, rstride=10, cstride=10)
|
||||
return fig
|
||||
|
||||
|
||||
|
||||
|
||||
def create_pyplot_scales():
|
||||
|
||||
plt.close('all')
|
||||
# Fixing random state for reproducibility
|
||||
np.random.seed(19680801)
|
||||
|
||||
# make up some data in the interval ]0, 1[
|
||||
y = np.random.normal(loc=0.5, scale=0.4, size=1000)
|
||||
y = y[(y > 0) & (y < 1)]
|
||||
y.sort()
|
||||
x = np.arange(len(y))
|
||||
|
||||
# plot with various axes scales
|
||||
plt.figure(1)
|
||||
|
||||
# linear
|
||||
plt.subplot(221)
|
||||
plt.plot(x, y)
|
||||
plt.yscale('linear')
|
||||
plt.title('linear')
|
||||
plt.grid(True)
|
||||
|
||||
# log
|
||||
plt.subplot(222)
|
||||
plt.plot(x, y)
|
||||
plt.yscale('log')
|
||||
plt.title('log')
|
||||
plt.grid(True)
|
||||
|
||||
# symmetric log
|
||||
plt.subplot(223)
|
||||
plt.plot(x, y - y.mean())
|
||||
plt.yscale('symlog', linthreshy=0.01)
|
||||
plt.title('symlog')
|
||||
plt.grid(True)
|
||||
|
||||
# logit
|
||||
plt.subplot(224)
|
||||
plt.plot(x, y)
|
||||
plt.yscale('logit')
|
||||
plt.title('logit')
|
||||
plt.grid(True)
|
||||
# Format the minor tick labels of the y-axis into empty strings with
|
||||
# `NullFormatter`, to avoid cumbering the axis with too many labels.
|
||||
plt.gca().yaxis.set_minor_formatter(NullFormatter())
|
||||
# Adjust the subplot layout, because the logit one may take more space
|
||||
# than usual, due to y-tick labels like "1 - 10^{-3}"
|
||||
plt.subplots_adjust(top=0.92, bottom=0.08, left=0.10, right=0.95, hspace=0.25,
|
||||
wspace=0.35)
|
||||
return plt.gcf()
|
||||
|
||||
|
||||
def draw_figure(fig, element):
|
||||
canv = FigureCanvasAgg(fig)
|
||||
buf = io.BytesIO()
|
||||
canv.print_figure(buf, format='png')
|
||||
|
||||
if buf is None:
|
||||
return None
|
||||
buf.seek(0)
|
||||
data = buf.read()
|
||||
element.update(data=data)
|
||||
|
||||
dictionary_of_figures = {'Axis Grid': create_axis_grid,
|
||||
'Subplot 3D': create_subplot_3d,
|
||||
'Scales' : create_pyplot_scales,
|
||||
'Basic Figure': create_figure}
|
||||
|
||||
def main():
|
||||
|
||||
layout = [
|
||||
[sg.T('Matplotlib Example', font='Any 20')],
|
||||
[sg.Listbox(dictionary_of_figures.keys(), size=(15, 5), key='-LB-'), sg.Image(key='-IMAGE-')],
|
||||
[sg.B('Draw'), sg.B('Exit')],
|
||||
]
|
||||
|
||||
window = sg.Window('Title', layout, finalize=True)
|
||||
|
||||
image_element = window['-IMAGE-'] # type: sg.Image
|
||||
|
||||
while True:
|
||||
event, values = window.read()
|
||||
if event == 'Exit' or event == sg.WIN_CLOSED:
|
||||
break
|
||||
if event == 'Draw':
|
||||
func = dictionary_of_figures[values['-LB-'][0]]
|
||||
draw_figure(func(), image_element)
|
||||
window.close()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
|
@ -0,0 +1,48 @@
|
|||
import PySimpleGUIWeb as sg
|
||||
import numpy as np
|
||||
from matplotlib.backends.backend_tkagg import FigureCanvasAgg
|
||||
import matplotlib.figure
|
||||
import io
|
||||
|
||||
|
||||
def create_figure():
|
||||
# ------------------------------- START OF YOUR MATPLOTLIB CODE -------------------------------
|
||||
fig = matplotlib.figure.Figure(figsize=(5, 4), dpi=100)
|
||||
t = np.arange(0, 3, .01)
|
||||
fig.add_subplot(111).plot(t, 2 * np.sin(2 * np.pi * t))
|
||||
|
||||
return fig
|
||||
|
||||
|
||||
def draw_figure(fig, element):
|
||||
canv = FigureCanvasAgg(fig)
|
||||
buf = io.BytesIO()
|
||||
canv.print_figure(buf, format='png')
|
||||
|
||||
if buf is None:
|
||||
return None
|
||||
buf.seek(0)
|
||||
data = buf.read()
|
||||
element.update(data=data)
|
||||
|
||||
def main():
|
||||
|
||||
layout = [
|
||||
[sg.T('Matplotlib Example', font='Any 20')],
|
||||
[sg.Image(key='-IMAGE-')],
|
||||
[sg.B('Draw'), sg.B('Exit')],
|
||||
]
|
||||
|
||||
window = sg.Window('Title', layout)
|
||||
|
||||
while True:
|
||||
event, values = window.read()
|
||||
if event == 'Exit' or event == sg.WIN_CLOSED:
|
||||
break
|
||||
if event == 'Draw':
|
||||
draw_figure(create_figure(), window['-IMAGE-'])
|
||||
window.close()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
Loading…
Reference in New Issue