我试图使用三列标题("NODE_POT_GAUCHE_i", "NODE_LISSE_CENTER_i", "NODE_POT_DROITE_i")作为标签,同时在我的后处理python脚本中绘制Ansys APDL分析的结果。
我现在做的是,当我在循环中绘图时,我手动添加标签:
# Parcours de tous les fichiers csv
for i in range(len(model[idx]['asb_path'])):
# Parcours a l'envers des indices pour positionner les graphs
j = len(model[idx]['asb_path'])-i-1
# Lecture du fichier csv possédant des headers
potiso = pd.read_csv(model[idx]['potiso_path'][i], index_col=0)
asb = pd.read_csv(model[idx]['asb_path'][i], index_col=0)
# Plot des résultats sur un subplot de la figure créer en haut
axs[j].plot(potiso, label='NODE_POT_ISO')
axs[j].plot(asb['NODE_POT_GAUCHE_'+str(i+1)], label='NODE_POT_GAUCHE_'+str(i+1))
axs[j].plot(asb['NODE_POT_DROITE_'+str(i+1)], label='NODE_POT_DROITE_'+str(i+1))
axs[j].set_title(os.path.basename(model[idx]['asb_path'][i]))
axs[j].set_xlabel('time(s)')
axs[j].set_ylabel('displacement(m)')
axs[j].legend()
axs[j].grid(True)
# Enregistrement au format .png
plt.savefig(fig_path)
我想要的是自动使用数据帧中的列标头,并在绘图时自动将它们用作标签,允许我在不干扰python后处理脚本的情况下更改csv组织。
我似乎找不到我的问题的答案,我尝试了不同的方法,比如让它留空:
# Parcours de tous les fichiers csv
for i in range(len(model[idx]['asb_path'])):
# Parcours a l'envers des indices pour positionner les graphs
j = len(model[idx]['asb_path'])-i-1
# Lecture du fichier csv possédant des headers
asb = pd.read_csv(model[idx]['asb_path'][i], index_col=0)
# Plot des résultats sur un subplot de la figure créer en haut
axs[j].plot(asb)
axs[j].set_title(os.path.basename(model[idx]['asb_path'][i]))
axs[j].set_xlabel('time(s)')
axs[j].set_ylabel('displacement(m)')
axs[j].legend()
axs[j].grid(True)
plt.savefig(fig_path)
但是我得到以下错误:
没有找到有标签的艺术家放在图例中。注意,当没有参数调用legend()时,标签以下划线开头的艺术家将被忽略。
必须有一种方法来提取列的名称,然后将它们作为我的绘图的标签条目输入。提前感谢您的帮助!
有人在别处回答了我,这让我在这里分享答案:
# Parcours de tous les fichiers csv
for i in range(len(model[idx]['asb_path'])):
# Parcours a l'envers des indices pour positionner les graphs
j = len(model[idx]['asb_path'])-i-1
# Lecture du fichier csv possédant des headers
asb = pd.read_csv(model[idx]['asb_path'][i], index_col=0)
# Plot des résultats sur un subplot de la figure créer en haut
axs[j].plot(asb, label = list(asb.columns))
axs[j].set_title(os.path.basename(model[idx]['asb_path'][i]))
axs[j].set_xlabel('time(s)')
axs[j].set_ylabel('displacement(m)')
axs[j].legend()
axs[j].grid(True)
plt.savefig(fig_path)
重要的是:
axs[j].plot(asb, label = list(asb.columns))
或:
axs[j].plot(asb, label = asb.columns)
它基本上使用数据框架对象的columns属性。您也可以遍历每一列并自己构建列表。(更多信息在这里:https://www.geeksforgeeks.org/how-to-get-column-names-in-pandas-dataframe/)
我使用asb失败了。因为我没有把它当作列表来使用,所以它之前没有工作。
编辑:如果只绘制了一列,请注意:
axs[j].plot(asb, label = list(asb.columns))
将返回['HEADER_NAME']。
:
axs[j].plot(asb, label = asb.columns)
返回一个索引。
所以如果只有一列,你应该使用:
axs[j].plot(asb, label = asb.columns[0])