g.text(x=i+0.1, y=df[df.columns[j]].values[i]+0.001, s=df.columns[j], horizontalalignment='right', size='medium', color='black')
до вас, как вы хотите добавить или вычесть числа в (x, y) координатах
данные: (sam.csv)
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
код:
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns
from matplotlib.lines import Line2D
import random
df = pd.read_csv('sam.csv').reset_index()
df.index = df['d']
del df['d']
print(df.columns)
print(df)
ax = plt.figure(figsize=(10, 7))
colors = ["#"+''.join([random.choice('0123456789ABCDEF') for j in range(6)])
for i in range(len(df.columns) - 1)]
# colors = ['#FFAA11', '#11AA11', '#55AA31', '#11BA81', '#CCABAA']
columns = list(df.columns)
for j in range(1, len(df.columns)):
color = colors[j-1]
g = sns.stripplot(x=df.index, y=columns[j], data=df, jitter=False, dodge=True, size=44, marker="_", linewidth=2,
color=color)
for j in range(1, len(df.columns)):
for i in range(len(df)):
g.text(x=i+0.1, y=df[df.columns[j]].values[i]+0.001, s=df.columns[j], horizontalalignment='right', size='medium', color='black')
elements = [Line2D([0], [0], color=colors[i]) for i in range(len(df.columns)-1)]
ax.legend(handles=elements, labels=list(df.columns)[1:])
plt.ylabel("Energy (Eh)")
plt.savefig('svm_conf.png', dpi=400)
plt.show()
вывод:
Index(['index', 'dxy', 'dyz', 'dz2', 'dxz', 'dx2-y2'], dtype='object')
Проблема в вашем коде:
В вашем обновленном коде dxy.text(df.index[line], df.dxy[line], "teste", horizontalalignment='right', size='medium', color='black')
здесь x=df.index[line]
, который является строкой, он должен быть числовым, потому что это координата для вашего текста
второй подход:
for j in range(1, len(df.columns)):
flag = True
for i in range(len(df)):
if flag is True:
delta = 0.3
align = 'left'
flag = False
else:
delta = -0.2
align = 'right'
flag = True
g.text(x=i+delta, y=df[df.columns[j]].values[i], s=df.columns[j], horizontalalignment=align, size='medium', color='black')
выход: