读取csv数据:
df = pd.read_csv(file_path)
print(df.info())
根据2个数组,绘制regplot,regplot是回归(regression)图像,如下:
epochs = df["epoch"].values
eval_top1 = df["eval_top1"].values
ax = sns.regplot(x=epochs, y=eval_top1, marker="+")
plt.show()
或者,直接绘制df的两个列,效果一致,如下:
ax = sns.regplot(x="epoch", y="eval_top1", data=df, marker="+")
plt.show()
输出:
使用2个y轴范围,将2个回归绘制到1张图,对比效果,如下:
- regplot + twinx
- 训练结果的第0位数值抖动,使用df[1:]忽略
ax = sns.regplot(x="epoch", y="eval_top1", data=df[1:], marker="+")
ax2 = ax.twinx()
sns.regplot(x="epoch", y="train_loss", data=df[1:], ax=ax2, marker="+", color="g")
输出:
如果需要颠倒(reverse)y轴坐标,使用ax.invert_yaxis()即可
ax = sns.regplot(x="epoch", y="eval_top1", data=df[1:], marker="+")
ax2 = ax.twinx()
ax2 = sns.regplot(x="epoch", y="train_loss", data=df[1:], ax=ax2, marker="+", color="g")
ax2.invert_yaxis()
plt.show()
效果:
需要将直线转换为曲线,增加参数order=2:
ax = sns.regplot(x="epoch", y="eval_top1", order=2, data=df[1:], marker="+")
ax2 = ax.twinx()
ax2 = sns.regplot(x="epoch", y="train_loss", order=2, data=df[1:], marker="+", ax=ax2, color="g")
plt.show()
效果:
最终绘制逻辑,同时支持绘制1张图和2张图:
def process_summary(csv_path, x_name="epoch", y_names=("eval_top1", "train_loss"), is_save=True):
"""
绘制csv的数值之间的关联
@param csv_path: csv文件
@param x_name: x轴的名称
@param y_names: y轴支持绘制2个
@param is_save: 是否保存图像
@return: 存储同名图像
"""
df = pd.read_csv(csv_path)
ax = sns.regplot(x=x_name, y=y_names[0], order=2, data=df[1:], marker="+")
if len(y_names) == 2:
ax2 = ax.twinx()
ax2 = sns.regplot(x=x_name, y=y_names[1], order=2, data=df[1:], marker="+", ax=ax2, color="g")
if is_save:
plt.savefig(csv_path.replace("csv", "png"))
plt.show()
参考:
- Second y-axis time series seaborn,绘制两个y坐标轴的图像
- seaborn.regplot,绘制回归(regression)的散点+均值中线
- Python – seaborn heatmap y-axis reverse order,颠倒y轴坐标
- Non-linear regression in Seaborn Python,回归曲线由直线转换为曲线
Original: https://blog.csdn.net/u012515223/article/details/125780317
Author: SpikeKing
Title: Seaborn – 绘制不同类型的回归(Regression)曲线
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/635202/
转载文章受原作者版权保护。转载请注明原作者出处!