【问题标题】:Plotting d orbital diagrams using matplotlib (or seaborn)使用 matplotlib(或 seaborn)绘制 d 轨道图
【发布时间】:2019-07-13 13:54:43
【问题描述】:

伙计们,我是一名化学家,我完成了一项实验,该实验为我提供了金属 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)

感谢您的帮助。

1excel 一个

2以excel版本为模型手绘

3摘自文献

【问题讨论】:

    标签: python-3.x pandas matplotlib seaborn


    【解决方案1】:

    你可以从 matplotlib 中的基本形状和函数中绘制任何你喜欢的东西。能级可以很简单markers,文字可以由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()
    

    【讨论】:

    • 非常感谢@ImportanceOfBeingErnest。您是否看到我们可以“堆叠”级别的任何方式(例如这里:huntresearchgroup.org.uk/images/for_lectures/…)或任何方式来对齐底部的 3 个轨道和顶部的 2 个轨道?
    • 我想我已经向您展示了如何使用散点标记和注释创建此类关卡。我会留给您将这些级别定位在您希望它们出现的位置。
    • 只是想知道选择 s=1444 的原因是什么。这肯定表示某事或只是一个随机的大数字?
    • @Bazingaa 这确实只是一个很大的数字;可能我尝试了 1000 和 2000,发现介于两者之间的东西看起来最好。当然使用平方数是有好处的,所以38**2 看起来不错。
    猜你喜欢
    • 2018-11-23
    • 2019-10-21
    • 1970-01-01
    • 2017-11-24
    • 1970-01-01
    • 1970-01-01
    • 2021-05-12
    • 1970-01-01
    • 2018-02-13
    相关资源
    最近更新 更多