如何使用csv列标题作为绘图标签



我试图使用三列标题("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])

相关内容

  • 没有找到相关文章

最新更新