You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Topspin导出适配格式数据并通过Python绘制可调轴2D等高线图

解决Topspin导出2D数据并Python绘制可调整坐标轴的等高线图

一、Topspin正确导出带坐标轴信息的方法

你之前导出的只有Z值是因为选了仅矩阵的格式,要导出包含X/Y轴刻度的文件,按以下步骤操作:

  • 右键拖拽选框选中目标2D区域
  • 方式1:菜单栏File > Save > Save as ASCII,在保存对话框里选**「Matrix with axes」**(部分版本叫「ASCII with axis info」),指定文件名保存
  • 方式2:Topspin命令行输入(已选中区域时):
    write2d axis=both file=your_output.txt
    
    这个命令会直接输出包含X/Y轴范围、点数和Z矩阵的文本文件

二、Python绘图代码(适配导出数据)

情况1:导出文件含轴参数+Z矩阵(推荐)

这种格式开头两行是X/Y的起始、终止、点数,后面是Z的二维数组,用下面的代码读取和绘图:

import numpy as np
import matplotlib.pyplot as plt

def load_topspin_data(file_path):
    with open(file_path, 'r') as f:
        # 读取X轴参数
        x_start, x_end, x_n = map(float, f.readline().split())
        # 读取Y轴参数
        y_start, y_end, y_n = map(float, f.readline().split())
        # 读取Z矩阵
        z = np.loadtxt(f)
    
    # 生成网格
    x = np.linspace(x_start, x_end, int(x_n))
    y = np.linspace(y_start, y_end, int(y_n))
    X, Y = np.meshgrid(x, y)
    return X, Y, z

# 加载数据
X, Y, Z = load_topspin_data('your_output.txt')

# 绘制等高线图
fig, ax = plt.subplots(figsize=(8, 6))
contour_plot = ax.contourf(X, Y, Z, cmap='viridis')
plt.colorbar(contour_plot, label='Signal Intensity')

# 调整坐标轴范围(自定义子区域)
# 示例:X轴限制在10-20 ppm,Y轴限制在5-15 ppm
ax.set_xlim(10, 20)
ax.set_ylim(5, 15)

# 设置标签
ax.set_xlabel('X Axis (ppm)')
ax.set_ylabel('Y Axis (ppm)')
ax.set_title('2D NMR Contour Plot')

plt.show()

情况2:导出文件为X/Y/Z三列格式

如果导出的是每行一个(X,Y,Z)点的文本,用以下代码处理:

import numpy as np
import matplotlib.pyplot as plt

# 读取三列数据
data = np.loadtxt('your_output.txt')
x_vals = data[:, 0]
y_vals = data[:, 1]
z_vals = data[:, 2]

# 生成规则网格
x_unique = np.unique(x_vals)
y_unique = np.unique(y_vals)
X, Y = np.meshgrid(x_unique, y_unique)
Z = z_vals.reshape(len(y_unique), len(x_unique))

# 绘图部分和上面一致
fig, ax = plt.subplots(figsize=(8, 6))
contour_plot = ax.contourf(X, Y, Z, cmap='viridis')
plt.colorbar(contour_plot, label='Signal Intensity')

# 调整子区域
ax.set_xlim(x_unique.min(), x_unique.max()) # 替换为你需要的范围
ax.set_ylim(y_unique.min(), y_unique.max())

ax.set_xlabel('X Axis (ppm)')
ax.set_ylabel('Y Axis (ppm)')
ax.set_title('2D NMR Contour Plot')

plt.show()

三、关键注意事项

  • 务必确认导出时勾选了包含坐标轴信息的选项,不要选仅Z矩阵的格式
  • 如果绘图时坐标轴方向不对,可对Z矩阵做转置(Z = Z.T)调整
  • set_xlim()和set_ylim()的参数直接替换成你需要的子区域范围即可

内容的提问来源于stack exchange,提问作者coffeedealer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 21:05:27