如何可视化Ising格点规范模型中键上的自旋?
二维Ising格点规范理论键上自旋的可视化方案(Python PIL实现)
二维Ising格点规范理论的自旋位于位点间的连接键上,分为水平键(相邻水平位点间)和垂直键(相邻垂直位点间)。对于N×N的位点网格,水平键数量为N×(N-1),垂直键数量为(N-1)×N,我们可以通过分别绘制这两类键来实现可视化。
核心思路
- 定义可视化参数:位点边长、键的宽度、自旋对应的颜色(比如
+1用黑色,-1用白色) - 计算画布尺寸:基于位点和键的尺寸,确保所有键和位点都能容纳
- 依次绘制水平键和垂直键,根据自旋值填充对应颜色(可选绘制位点作为参考)
代码实现
from PIL import Image, ImageDraw # 1. 设置参数 N = 20 # 位点网格的大小(N×N) site_size = 15 # 每个位点的边长(像素) bond_width = 5 # 键的宽度(像素) color_map = {1: (0, 0, 0), -1: (255, 255, 255)} # 自旋对应的颜色:+1黑,-1白 # 2. 计算画布尺寸 canvas_width = N * site_size + (N - 1) * bond_width canvas_height = N * site_size + (N - 1) * bond_width # 创建空白画布(白色背景) img = Image.new("RGB", (canvas_width, canvas_height), (255, 255, 255)) draw = ImageDraw.Draw(img) # 3. 生成模拟的键自旋数据(可替换为你的真实数据) # 水平键:horiz_bonds[i][j] 表示第i行、第j个水平键(连接位点(i,j)和(i,j+1)) horiz_bonds = [[1 if (i+j)%2 ==0 else -1 for j in range(N-1)] for i in range(N)] # 垂直键:vert_bonds[i][j] 表示第i个垂直键、第j列(连接位点(i,j)和(i+1,j)) vert_bonds = [[-1 if (i+j)%2 ==0 else 1 for j in range(N)] for i in range(N-1)] # 4. 绘制水平键 for i in range(N): for j in range(N-1): spin = horiz_bonds[i][j] # 计算水平键的位置:x起始为位点右侧,y起始为当前行位点的y坐标 x_start = j * (site_size + bond_width) + site_size y_start = i * (site_size + bond_width) x_end = x_start + bond_width y_end = y_start + site_size draw.rectangle([x_start, y_start, x_end, y_end], fill=color_map[spin]) # 5. 绘制垂直键 for i in range(N-1): for j in range(N): spin = vert_bonds[i][j] # 计算垂直键的位置:x起始为当前列位点的x坐标,y起始为位点下方 x_start = j * (site_size + bond_width) y_start = i * (site_size + bond_width) + site_size x_end = x_start + site_size y_end = y_start + bond_width draw.rectangle([x_start, y_start, x_end, y_end], fill=color_map[spin]) # 可选:绘制位点(灰色,作为参考) for i in range(N): for j in range(N): x = j * (site_size + bond_width) y = i * (site_size + bond_width) draw.rectangle([x, y, x+site_size, y+site_size], fill=(200, 200, 200)) # 保存或显示图像 img.save("ising_gauge_bonds.png") img.show()
调整与优化
- 若不需要显示位点,可删除“绘制位点”的代码块,只保留键的绘制
- 可以修改
color_map使用其他颜色(比如红色/蓝色)区分自旋 - 调整
site_size和bond_width的比例,让键的显示更清晰(比如键宽设为位点边长的1/3) - 若你的自旋数据存储格式不同,只需调整
horiz_bonds和vert_bonds的读取逻辑即可
内容的提问来源于stack exchange,提问作者QFTheorist
相关产品推荐
相关产品推荐

