绘制折线图遇到问题记录
绘制折线图
主要参考:https://blog.csdn.net/qq_38029916/article/details/121611066
对应代码
import csv
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['font.family'] = 'sans-serif'
plt.rcParams['axes.unicode_minus'] = Falsepd_data = pd.read_csv("results.csv")
# %%capture output
## 捕获横坐标
epoch_data = pd_data["epoch"].astype(int).values
type(pd_data["epoch"])%%capture output
pd_data["train/box_loss"][np.isinf(pd_data["train/box_loss"])] = np.nan
train_cls_loss_data = pd_data["train/box_loss"].fillna(method="backfill",axis=0,inplace=False).astype(float).valuesdef get_data(data:pd.pandas)->None:if np.inf in data.values or np.nan in data.values:data[np.isinf(data)] = np.nandata = data.fillna(method="backfill",axis=0,inplace = False).astype(float).valuesreturn datadef main():## train_box_loss dataepochs = pd_data["epoch"].astype(int).valuestrain_box_loss = get_data(pd_data["train/box_loss"])train_cls_loss = get_data(pd_data["train/cls_loss"])train_dfl_loss = get_data(pd_data["train/dfl_loss"])val_box_loss = get_data(pd_data["val/box_loss"])val_cls_loss = get_data(pd_data["val/cls_loss"])val_dfl_loss = get_data(pd_data["val/dfl_loss"])colors = np.random.rand(6,3)fig,axes = plt.subplots(2,3 , figsize = (15,10))# Plot the train lossesaxes[0, 0].plot(epochs, train_box_loss, color=colors[0], label='train_box_loss')axes[0, 1].plot(epochs, train_cls_loss, color=colors[1], label='train_cls_loss')axes[0, 2].plot(epochs, train_dfl_loss, color=colors[2], label='train_dfl_loss')# Plot the validation lossesaxes[1, 0].plot(epochs, val_box_loss, color=colors[3], label='val_box_loss')axes[1, 1].plot(epochs, val_cls_loss, color=colors[4], label='val_cls_loss')axes[1, 2].plot(epochs, val_dfl_loss, color=colors[5], label='val_dfl_loss')# Set labels and titles for each plotaxes[0, 0].set_title('Train Box Loss')axes[0, 1].set_title('Train CLS Loss')axes[0, 2].set_title('Train DFL Loss')axes[1, 0].set_title('Validation Box Loss')axes[1, 1].set_title('Validation CLS Loss')axes[1, 2].set_title('Validation DFL Loss')# Set common x and y labelsfor ax in axes.flat:ax.set_xlabel('Epoch')ax.set_ylabel('Loss')ax.legend()# Adjust layout to prevent overlapplt.tight_layout()plt.savefig("./result.jpg")# Show the plotplt.show()
遇到问题👇
问题1-缺失字体
查看对应的绘制图时,少了字体,对应解决方法就是下载字体文件到指定目录中。
- 到该链接下载字体
- 寻找matplotlib的路径:/root/miniconda3/envs/yolo/lib/python3.10/site-packages/matplotlib/mpl-data/fonts/ttf
- 删除缓存路径,打印该路径后进入该路径rm *。
import matplotlib as mpl
print(mpl.get_cachedir())
问题2-inf值识别&处理
遇到的问题,比如inf需要识别。
Q:为什么会出现inf值?👇
A:因为在有数据的时候除0了,数值写入会将值写为inf。ValueError: Input contains NaN, infinity or a value too large for dtype('float64').
Q:判断某一列中是否存在inf值?👇
A:首先将该列值更改为np数组,然后进行判断。
col_data = pd['col_name'].astype(float).values
if np.inf in col_data:print("np.inf存在")
Q:inf值怎么处理?👇
A:首先替换inf为nan值==》df['col_name'][np.isinf(df['col_name'])] = np.nan
。
将nan值替换为需要的值,我选用的是和前后一致。data = data.fillna(method="backfill",axis=0,inplace = False).astype(float).values
参考文献
- 字体缺失👇
- https://blog.csdn.net/weixin_40566713/article/details/137275377
- inf值处理👇
- https://blog.csdn.net/sinat_26811377/article/details/103126133
- https://blog.csdn.net/yangnianxiang/article/details/121769037
- https://blog.csdn.net/sinat_28442665/article/details/104901143
- https://blog.csdn.net/qq_35190319/article/details/89280372