读取 VASP 的 CHGDIFF.vasp,一键显示 VESTA 风格的「纯黄 / 纯青」正负等值面,
等值面水平与配色随手可调
俯视图:左侧为稳定的 Qt 彩条,上方为六个标准视角,右侧为实时控制面板
前往 Releases · Latest 下载
CHARGEDIFF_Viewer_portable_win64.zip,解压后双击CHARGEDIFF_Viewer\CHARGEDIFF_Viewer.exe即可运行,无需安装 Python。
| 功能 | |
|---|---|
| 🧊 | VESTA 风格等值面:同一体数据上抽取正、负两个等值面 |
| 🟡🔵 | 纯黄 / 纯青配色(无白):默认「青 → 黄」方案,色条范围自动等于 ±等值面水平,正/负表面呈现与 VESTA 一致的纯黄 / 纯青 |
| 📂 | 给定目录自动读取:识别 CHGDIFF.vasp / CHGDIFF / CHGCAR / CHG,取第一个网格块 |
| ➕ | 差分定义:ρ_diff = ρ(AB) − ρ(A) − ρ(B),+level = 电子积聚,−level = 电子耗散 |
| 📏 | 等值面水平可调:` |
| 显示内容可选:正 + 负 / 仅正(积聚)/ 仅负(耗散) | |
| 🎚️ | 彩条范围可自定义:默认跟随等值面水平,也可手动输入区间,左侧彩条实时同步 |
| 🌈 | 配色方案:青-黄(VESTA)/ 黄-青 / 蓝-白-红 / 红-白-蓝 / 彩虹 / 自定义三色 |
| 📐 | 正交投影:远近同大,旋转时结构大小恒定 |
| 🧭 | 六个标准视角:俯视 / 正视 / 右视 / 仰视 / 后视 / 左视(基于实际晶胞矢量) |
| 🖱️ | 拖动旋转、滚轮缩放(正交相机距离驱动) |
| 👁️ | 不透明度、原子样式(球棍/球体/棍棒/线框/隐藏)、原子半径、晶胞、背景色 |
| 📸 | 一键导出 PNG(含左侧彩条) |
| 🌗 | 深色 / 浅色主题 |
| 📦 | 可打包便携 exe:免安装、无需 Python,拷到别的 Windows 电脑即可运行 |
| 🌐 | 离线可用:本地 3Dmol.js,无需联网 |
| 俯视 | 正视(侧视) |
|---|---|
![]() |
![]() |
图中为 Mo–O 体系吸附 C 后的差分电荷密度: 黄色等值面 = 电子积聚区,青色等值面 = 电子耗散区。
plot_chargediff/
├─ chargediff_viewer_gui.py # ★ 主程序 (PySide6 窗口 + 控制面板)
├─ viewer3d.py # ★ 3Dmol.js 查看器 (正/负等值面 / 正交投影 / 六视角)
├─ vasp_io.py # ★ VASP 解析 / 网格降采样 / cube 几何 / 视角四元数
├─ ui_kit.py # ★ iOS 风格 Qt 控件与主题
├─ 3dmol/3Dmol-min.js # ★ 本地 3Dmol.js (离线)
├─ assets/app.ico # 应用图标
├─ docs/ # README 配图
├─ CHARGEDIFF_Viewer.spec # PyInstaller 打包配置
├─ build_exe.bat # 双击打包便携程序包
├─ install_deps.bat # 双击安装依赖
├─ PORTABLE_README.txt # 便携包使用说明
├─ selftest_render.py # 可选: 渲染自检 (统计等值面并导出 PNG)
├─ requirements.txt
├─ run_viewer.bat # 双击启动 (无控制台)
└─ run_viewer_debug.bat # 双击启动 (保留控制台, 看报错)
python -m pip install -r requirements.txt只依赖 numpy 与 PySide6(含 QtWebEngine)。
:: 双击 run_viewer.bat
:: 或命令行 (可传入数据目录)
python chargediff_viewer_gui.py path\to\vasp\dir启动后自动读取目录中的差分电荷密度文件。
- 数据文件:「数据目录」指向含
CHGDIFF.vasp的目录 → 自动识别 → 点「重新载入」(启动时已自动载入)。 - 等值面:拖动「等值面水平」(
e/ų,程序按数据自动建议); 选择「显示内容」(正 + 负 / 仅正 / 仅负)。 - 颜色 / 图例:默认「青-黄 (VESTA)」配色,且「范围=等值面」开启—— 色条范围自动等于 ±等值面水平,正/负表面呈现近似纯黄 / 纯青(与 VESTA 一致); 也可选择蓝-白-红、彩虹等,或关闭「按数值着色」改用固定纯色。
- 视角:视图上方 6 个按钮;也可拖动旋转、滚轮缩放。
- 显示选项:不透明度、原子样式、原子半径、晶胞、背景色。
- 右上角「导出 PNG」(含彩条)。
提示:单位为 e/ų。VASP 的
CHGCAR类文件数值为ρ·V_cell, 程序会自动除以晶胞体积得到e/ų。
// 同一体数据抽取 +level 与 −level 两个等值面
sh_pos = viewer.addIsosurface(diffVD, {isoval: +level, opacity: op});
sh_neg = viewer.addIsosurface(diffVD, {isoval: -level, opacity: op});
// 用 ρ_diff 数值给两个面着色(青 -> 黄,无白)
sh_pos.updateStyle({voldata: diffVD, volscheme: scheme(cfg)});
sh_neg.updateStyle({voldata: diffVD, volscheme: scheme(cfg)});- VESTA 风格纯色:VESTA 的差分电荷图是纯黄(正)/ 纯青(负),中间没有白色。
程序默认使用「青 → 黄」双色方案(
#00C8D7→#FFE100),并让色条范围 自动等于 ±等值面水平(默认开启「范围=等值面」)。由于 MarchingCube 抽取的等值面顶点数值恰好等于±level,正好落在色条两端,于是正/负表面 呈现近似纯黄 / 纯青(无渐变、无白)。 - 若想看到数值渐变(如靠近界面处颜色不同),关闭「范围=等值面」并把色条范围 调大,或改用蓝-白-红 / 彩虹等方案。
- 「按数值着色」关闭时,改传
color参数使用固定纯色(默认 正黄 / 负青)。
- VASP 以 x 最快 / z 最慢写出;3Dmol 的
VolumeData与 MarchingCube 以 x 最慢 / z 最快索引。因此用reshape((nx,ny,nz), order='F')得到axes=(x,y,z)的物理数组,否则等值面方向就错了。 - 自适应降采样:网格点数不超过 70 万(大网格自动 ×2/×3)。
- 单位:
CHGCAR类数值为ρ·V_cell,除以晶胞体积得到 e/ų。
viewer.setProjection('orthographic');3Dmol 的show()会按相机距离重算正交视锥, 因此用相机距离驱动缩放:dist = halfH / (zoom·tan fov),滚轮改ORTHO_ZOOM。- 逐视角贴合:把原子 + 晶胞角点用当前四元数旋转到相机系,取投影后 x/y 半宽, 据此设置正交视锥 —— 俯视时铺满画面,侧视时完整装下高真空晶胞。
- 六视角四元数由实际晶胞矢量计算,与 VESTA 惯例一致。
彩条是独立的 Qt 控件(位于 3D 视图左侧,与网页层叠无关),切换视角时绝不闪烁。
颜色由页面用当前配色方案 sampleColors() 采样后回传,保证与表面完全一致;
「导出 PNG」时用 QPainter 把彩条合成到图上。
python selftest_render.py test载入数据 → 等待 3D 视图就绪 → 统计正/负等值面数量 → 导出
_selftest_chargediff.png,输出 SELFTEST OK。
双击 build_exe.bat(默认生成便携文件夹,推荐):
dist\CHARGEDIFF_Viewer\
CHARGEDIFF_Viewer.exe <- 双击即用
使用说明.txt
_internal\ <- 依赖 (Qt / QtWebEngine / 3dmol / 图标)
把整个 CHARGEDIFF_Viewer 文件夹拷到任何 Windows 10/11 机器上双击即可运行,
免安装、无需 Python。
- 用户数据:把含
CHGDIFF.vasp的目录放到 exe 旁test\或data\,程序自动读取。 - 单文件模式(不推荐):
set CHG_ONEFILE=1后再运行build_exe.bat。
MIT License。3Dmol.js 遵循其自身许可(BSD-3-Clause)。
