Python中使用Seaborn库绘制多线图及平滑多线图的实现方法
现有代码问题
sns.lineplot调用逻辑错误:直接传入宽格式DataFrame时,seaborn默认将行索引作为x轴、所有数值列作为y值绘图,不会自动识别Size为x轴,因此出现x轴为常量直线的异常表现。sns.lmplot参数存在多处错误:一是传入的data参数为未定义的df变量,实际定义的DataFrame名为df1;二是DataFrame中无Time字段,只有Encrypt_Time、Decrypt_Time两个独立的时间列;三是仅3个样本点的前提下设置拟合阶数order=4不符合数学规则,4阶多项式拟合至少需要5个样本点,会直接触发报错。
需求实现方案
1. 绘制x轴为Size的多线图
先将宽格式DataFrame转换为长格式,统一时间字段后调用绘图接口即可:
import numpy as np import pandas as pd import seaborn as sns import matplotlib.pyplot as plt T = np.array([10.03,100.348,1023.385]) power1 = np.array([100000,86000,73000]) power2 = np.array([1008000,95000,1009000]) df1 = pd.DataFrame(data = {'Size': T, 'Encrypt_Time': power1, 'Decrypt_Time': power2}) # 转换为长格式,整合时间字段、标记时间类型 df_long = df1.melt(id_vars='Size', value_vars=['Encrypt_Time', 'Decrypt_Time'], var_name='Time_Type', value_name='Time') # 绘制多线图,hue参数区分加密、解密两条曲线 exp1 = sns.lineplot(data=df_long, x='Size', y='Time', hue='Time_Type', marker='o') plt.savefig('exp1.png') plt.close()
2. 绘制平滑多线图
适配样本量调整拟合阶数,使用长格式DataFrame绘图即可:
# 仅3个样本点时最高支持2阶多项式拟合,通过hue参数同时对两类时间曲线做平滑 exp1_smooth = sns.lmplot(x='Size', y='Time', hue='Time_Type', data=df_long, ci=None, order=2, truncate=False) plt.savefig('exp1_smooth.png')
内容的提问来源于stack exchange,提问作者rishabh goyal
相关产品推荐
相关产品推荐

