From 3491a88bc6d825bcb01e585cdc45b8f31d43ae2a Mon Sep 17 00:00:00 2001 From: JYNi16 <49049752+JYNi16@users.noreply.github.com> Date: Tue, 6 Sep 2022 08:03:24 +0800 Subject: [PATCH] Add files via upload --- XYmodel_metropolis_python/plot_votex.py | 63 +++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 XYmodel_metropolis_python/plot_votex.py diff --git a/XYmodel_metropolis_python/plot_votex.py b/XYmodel_metropolis_python/plot_votex.py new file mode 100644 index 0000000..532c514 --- /dev/null +++ b/XYmodel_metropolis_python/plot_votex.py @@ -0,0 +1,63 @@ +import matplotlib.pylab as plt +import matplotlib.animation as animation +import matplotlib.patches as patches +from matplotlib.collections import PatchCollection +import matplotlib.cm as cm +from matplotlib.colors import Normalize +import numpy as np +from xymodel_mc import * + +def visualise(sim): + X = np.arange(sim.A.size).reshape(sim.A.shape) % sim.A.shape[0] + Y = (np.arange(sim.A.size).reshape(sim.A.shape) % sim.A.shape[1]).T + + U = cos(sim.A) + V = sin(sim.A) + + fig, ax = plt.subplots(1, 1, figsize=(15, 15)) + + rects = [] + + # create rectangles for vortex/antivortex determination + for i in range(sim.V.shape[0]): + for j in range(sim.V.shape[1]): + rect = patches.Rectangle(xy=(i, j), height=1, width=1) + rects.append(rect) + rects = PatchCollection(rects) + + # Set colors for the rectangles + col = 'RdBu' + r_cmap = plt.get_cmap(col) + r_cmap_r = plt.get_cmap(col + "_r") # eto kostil' =) + rects.set_cmap(r_cmap) + rects.set_clim(vmin=-1, vmax=1) + + rects.set_animated(True) + rects.set_array(sim.V.flatten('F') / 2) + ax.add_collection(rects) + + # create legend + legend_boxes = [patches.Patch(facecolor=r_cmap(0.7), label='Antiortex'), + patches.Patch(facecolor=r_cmap_r(0.7), label='Vortex')] + ax.legend(handles=legend_boxes) + + # build an initial quiver plot + q = ax.quiver(X, Y, U, V, pivot='mid', cmap=plt.cm.get_cmap('hsv'), units='inches', scale=4) + fig.colorbar(q, label='Angles (2 pi)') + ax.set_xlim(-1, sim.A.shape[0]) + ax.set_ylim(-1, sim.A.shape[1]) + q.set_UVC(U, V, C=sim.A) + + plt.show() + + return q, fig, rects + + +if __name__=="__main__": + sim = XYMetropolis((40,40), + beta=1, + J=5, + random_state=5, + initial_state='hot') + sim.simulate(1000000) + visualise(sim)