【发布时间】:2019-08-01 02:14:17
【问题描述】:
我在 seaborn 上使用 stripplot 来显示一系列金属中心中 d 轨道的能量。
这是数据框:
dxy dyz dz2 dxz dx2-y2
Fe -0.25336 -0.24661 -0.22991 -0.07644 -0.16229
Co -0.38294 -0.38050 -0.34952 -0.21271 -0.27173
Ni -0.47550 -0.47504 -0.46817 -0.44385 -0.45632
使用这段代码我非常接近我想要的(结果如下图):
plt.figure(figsize=(3, 7))
sns.stripplot(x=df.index, y="dxy", data=df, jitter=False, dodge=True, size=44, marker="_", linewidth=2)
sns.stripplot(x=df.index, y="dyz", data=df, jitter=False, dodge=True, size=44, marker="_", linewidth=2)
sns.stripplot(x=df.index, y="dz2", data=df, jitter=False, dodge=True, size=44, marker="_", linewidth=2)
sns.stripplot(x=df.index, y="dxz", data=df, jitter=False, dodge=True, size=44, marker="_", linewidth=2)
sns.stripplot(x=df.index, y="dx2-y2", data=df, jitter=False, dodge=True, size=44, marker="_", linewidth=2)
plt.ylabel("Energy (Eh)")
plt.savefig('svm_conf.png', dpi=400)
我想将每个轨道的名称(dxy、dxz 等)作为标签添加到每个点(或本例中的线哈哈)的右侧(或最佳可能位置)。
非常感谢任何帮助。
P.S.:我可以看到最后生成的数字缺少 Y 轴上的部分数字。为什么?
更新
我正在尝试 @ImportanceOfBeingErnest 提出的解决方案的 seaborn 版本。仅使用其中一个标记进行测试,目前,我得到这个 AttributeError: 'NoneType' object has no attribute 'update' 的回溯很长,这对我来说没有多大意义。这是我的代码:
dxy = sns.stripplot(x=df.index, y="dxy", data=df, jitter=False, dodge=True, size=44, marker="_", linewidth=2)
for line in range(0, df.shape[0]):
dxy.text(df.index[line], df.dxy[line], "teste", horizontalalignment='right', size='medium', color='black')
【问题讨论】:
-
为什么不坚持this solution?在任何情况下,标签都将以相同的方式完成,循环数据帧并为每个值创建一个
ax.annotate。 -
感谢@ImportanceOfBeingErnest 的回复。我已经用我的试探性对文本添加了一个小更新。
标签: python python-3.x pandas matplotlib seaborn