如何用Python将值网格转换为密度图呈现硅表面结构
解决STM硅表面数据转密度图的方案
别慌!用Python的科学计算和绘图工具就能快速搞定这个需求,下面是一步一步的具体操作:
1. 准备依赖库
首先确保你安装了处理数据和绘图的必要工具,打开终端执行:
pip install numpy matplotlib
2. 完整代码实现
把以下代码保存为stm_plot.py,放在和stm.txt同一目录下运行即可:
import numpy as np import matplotlib.pyplot as plt # 读取STM扫描数据 # 如果文件有表头,可添加skip_header=N参数(N是表头行数) stm_data = np.loadtxt("stm.txt") # 先检查数据形状,确认是二维网格结构 print(f"数据维度:{stm_data.shape}") # 万一数据是一维的,需要手动转成二维(替换n_rows和n_cols为实际行列数) # stm_data = stm_data.reshape((n_rows, n_cols)) # 创建绘图画布 fig, ax = plt.subplots(figsize=(10, 8)) # 绘制密度图 # cmap选颜色映射,interpolation控制插值方式,origin='lower'让原点在左下角(符合扫描习惯) im = ax.imshow(stm_data, cmap='viridis', interpolation='nearest', origin='lower') # 添加颜色条,标注物理意义(比如表面高度) plt.colorbar(im, label='Surface Height (Å)') # 设置图表标题和坐标轴标签 ax.set_title('Silicon Surface STM Density Map', fontsize=14, fontweight='bold') ax.set_xlabel('Scan X Coordinate', fontsize=12) ax.set_ylabel('Scan Y Coordinate', fontsize=12) # 显示图像(换成plt.savefig('stm_density.png', dpi=300)可导出高清图片) plt.show()
3. 关键细节调整
- 颜色映射选择:
cmap参数可以换成'plasma'、'inferno'或'gray',根据你想要的可视化风格调整; - 插值方式:
interpolation='nearest'会保留原始数据的像素感,适合观察精细结构;'bilinear'会让图像更平滑; - 数据维度问题:如果读取后数据是一维数组,你需要知道原始扫描的行列数,用
reshape转换为二维网格; - 数据格式问题:如果读取报错,先打开
stm.txt确认是纯数值的网格(每行对应一行扫描数据),没有多余符号或注释。
内容的提问来源于stack exchange,提问作者Brandon SeedlessBananas Mc-Wil
相关产品推荐
相关产品推荐

