使用matplotlib(或seaborn)绘制d轨道图

时间:2019-02-20 00:03:13

标签: python-3.x pandas matplotlib seaborn

伙计们,我是化学家,我完成了一个实验,该实验为我提供了金属d轨道的能量。

在Excel 1中获得正确的能量比例并使用诸如Inkscape之类的绘图程序绘制分子轨道图相对容易(就像我在2下面所做的那样),但是我很乐意使用python来获得一个精美的图表,该图表考虑了我们在书中看到的轨道能量。

我第一次使用seaborn和swarmplot的尝试显然与正确的方法相去甚远,也许(可能是!)不是到达那里的正确方法。我很乐意在3中实现类似右侧的功能。

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

Energies = [-0.40008, -0.39583, -0.38466, -0.23478, -0.21239]
orbitals = ["dz2", "dxy", "dyz", "dx2y2", "dxz"]
df = pd.DataFrame(Energies)
df["Orbitals"] = pd.DataFrame(orbitals)
sns.swarmplot(y=df[0], size=16)

感谢您的帮助。

1优秀的人

enter image description here

2使用excel版本作为模型手工绘制

enter image description here

3摘录自文献

enter image description here

1 个答案:

答案 0 :(得分:1)

您可以从matplotlib的基本形状和功能中绘制任何喜欢的东西。能级可以很简单marker,文本可以由annotate产生。

import numpy as np
import matplotlib.pyplot as plt


Energies = [-0.40008, -0.39583, -0.38466, -0.23478, -0.21239]
orbitals = ["$d_{z^2}$", "$d_{xy}$", "$d_{yz}$", "$d_{x^2 - y^2}$", "$d_{xz}$"]
x = np.arange(len(Energies))

fig, ax = plt.subplots()
ax.scatter(x, Energies, s=1444, marker="_", linewidth=3, zorder=3)
ax.grid(axis='y')

for xi,yi,tx in zip(x,Energies,orbitals):
    ax.annotate(tx, xy=(xi,yi), xytext=(0,-4), size=18,
                ha="center", va="top", textcoords="offset points")

ax.margins(0.2)
plt.show()

enter image description here