1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
# -*- coding: utf-8 -*-
# vispy: gallery 2
# Copyright (c) Vispy Development Team. All Rights Reserved.
# Distributed under the (new) BSD License. See LICENSE.txt for more info.
"""
Plot data with different styles
===============================
"""
import numpy as np
from vispy import plot as vp
fig = vp.Fig(size=(600, 500), show=False)
# Plot the target square wave shape
x = np.linspace(0, 10, 1000)
y = np.zeros(1000)
y[1:500] = 1
y[500:-1] = -1
line = fig[0, 0].plot((x, y), width=3, color='k',
title='Square Wave Fourier Expansion', xlabel='x',
ylabel='4/π Σ[ 1/n sin(nπx/L) | n=1,3,5,...]')
y = np.zeros(1000)
L = 5
colors = [(0.8, 0, 0, 1),
(0.8, 0, 0.8, 1),
(0, 0, 1.0, 1),
(0, 0.7, 0, 1), ]
plot_nvals = [1, 3, 7, 31]
for i in range(16):
n = i * 2 + 1
y += (4. / np.pi) * (1. / n) * np.sin(n * np.pi * x / L)
if n in plot_nvals:
tmp_line = fig[0, 0].plot((x, y), color=colors[plot_nvals.index(n)],
width=2)
tmp_line.update_gl_state(depth_test=False)
labelgrid = fig[0, 0].view.add_grid(margin=10)
box = vp.Widget(bgcolor=(1, 1, 1, 0.6), border_color='k')
box_widget = labelgrid.add_widget(box, row=0, col=1)
box_widget.width_max = 90
box_widget.height_max = 120
bottom_spacer = vp.Widget()
labelgrid.add_widget(bottom_spacer, row=1, col=0)
labels = [vp.Label('n=%d' % plot_nvals[i], color=colors[i], anchor_x='left')
for i in range(len(plot_nvals))]
boxgrid = box.add_grid()
for i, label in enumerate(labels):
label_widget = boxgrid.add_widget(label, row=i, col=0)
grid = vp.visuals.GridLines(color=(0, 0, 0, 0.5))
grid.set_gl_state('translucent')
fig[0, 0].view.add(grid)
if __name__ == '__main__':
fig.show(run=True)
|