今天来分享一个Python的折线图模板,先看效果:

本文分为以下6个部分(获取方式在 “06 ”部分):
00.数据组织格式

01. 设置工作环境
# 1. 设置工作环境# =============================================================================# 1.1 导入必要的库import pandas as pdimport matplotlib.pyplot as pltimport numpy as npimport os# 1.2 设置工作空间os.chdir("D:/Desktop/Py科研绘图/Python论文插图绘制模板第1期-折线图")
02. 数据读取
# 2. 读取数据# =============================================================================data_df = pd.read_excel("data.xlsx")print("数据预览:")print(data_df.head())# 确认列名(x, y, group)if not {'x', 'y', 'group'}.issubset(data_df.columns):raise KeyError("数据必须包含 'x', 'y', 'group' 三列!")

03. 绘制图形


# =============================================================================# 3. 定义每条折线的绘图参数# =============================================================================groups = data_df['group'].unique()print(f"检测到组别: {groups.tolist()}")# 参数顺序务必与 groups 一一对应,若组别数量不为6,请调整列表长度line_params = {'color': ['#1F77B4', '#FF7F0E', '#2CA02C', 'black', '#9467BD', 'red'], # 线条颜色'linestyle': ['--', '--', '--', '--', '--', '--'], # 线型'linewidth': [2.5, 2.5, 2.5, 2.5, 2.5, 2.5], # 线宽'marker': ['o', 'v', '^', '+', '*', 's'], # 标记点符号'markersize': [8.5, 8.5, 8.5, 8.5, 8.5, 8.5], # 标记点大小'markeredgewidth': [2.0] * 6, # 标记点边框线宽'alpha': [1.0] * 6 # 透明度}if len(groups) != len(line_params['color']):raise ValueError(f"参数列表长度({len(line_params['color'])})与组别数量({len(groups)})不一致!")# 坐标轴范围参考值(用于后续自适应调整)x_min, x_max = data_df['x'].min(), data_df['x'].max()y_min, y_max = data_df['y'].min(), data_df['y'].max()# =============================================================================# 4. 绘制图形# =============================================================================plt.figure(figsize=(9, 8)) # 图片尺寸(宽 × 高,单位:英寸)# 逐条绘制折线与标记点for i, grp in enumerate(groups):subset = data_df[data_df['group'] == grp].sort_values('x')plt.plot(subset['x'], subset['y'],color=line_params['color'][i],linestyle=line_params['linestyle'][i],linewidth=line_params['linewidth'][i],marker=line_params['marker'][i],markersize=line_params['markersize'][i],markeredgewidth=line_params['markeredgewidth'][i],alpha=line_params['alpha'][i],label=grp # 图例标签(与数据中的分组名一致))# 5. 设置坐标轴# 5.1 坐标轴标题plt.xlabel("X_Title")plt.ylabel("Y_Title")# 5.2 坐标轴范围与刻度(精确设置,可根据需要替换为自适应范围)# 5.2.1 横轴范围plt.xlim(-0.1, 1.1)plt.xticks(np.arange(0, 1.11, 0.1), [f"{t:.1f}" for t in np.arange(0, 1.11, 0.1)])# 5.2.1 纵轴范围plt.ylim(0.87, 2.34)plt.yticks(np.arange(0.94, 2.35, 0.2), [f"{t:.2f}" for t in np.arange(0.94, 2.35, 0.2)])# #如果数据范围不确定,可先用以下两行自动缩放,再根据输出调整精确值:# plt.xlim(x_min - 0.1*(x_max-x_min), x_max + 0.1*(x_max-x_min))# plt.ylim(y_min - 0.1*(y_max-y_min), y_max + 0.1*(y_max-y_min))
04. 调整细节
# 6. 主题美化# =============================================================================ax = plt.gca()# 6.1 隐藏上、右边框ax.spines['top'].set_visible(False)ax.spines['right'].set_visible(False)ax.spines['left'].set_linewidth(0.8)ax.spines['bottom'].set_linewidth(0.8)# 6.2 网格线:仅 Y 轴主网格,浅灰色ax.yaxis.grid(True, which='major', color='0.9', linewidth=1.5) # 使用 '0.9' 灰度值ax.xaxis.grid(False)ax.set_axisbelow(True)# 6.3 刻度线方向朝外ax.tick_params(axis='both', direction='out', length=4, width=0.8)# 7. 字体设置(不全局设置,分开指定)# =============================================================================# 横轴标题设置ax.xaxis.label.set_family('DejaVu Sans') # 字体ax.xaxis.label.set_size(26) # 字号ax.xaxis.label.set_style('italic') # 字体样式(常规"normal"、斜体"italic"、倾斜体"oblique")ax.xaxis.label.set_color('black') # 字体颜色# 纵轴标题设置ax.yaxis.label.set_family('DejaVu Sans') # 字体ax.yaxis.label.set_size(26) # 字号ax.yaxis.label.set_style('italic') # 字体样式(常规"normal"、斜体"italic"、倾斜体"oblique")ax.yaxis.label.set_color('black') # 字体颜色# 横轴刻度标签设置for label in ax.get_xticklabels():label.set_family('DejaVu Sans') # 字体label.set_size(16) # 字号label.set_style('italic') # 字体样式(常规"normal"、斜体"italic"、倾斜体"oblique")label.set_weight('bold') # 字体粗细(可选值:'light'、'normal'、'bold'、'heavy'、'black' 或数值 0-1000)label.set_color('black') # 字体颜色# 纵轴刻度标签设置for label in ax.get_yticklabels():label.set_family('DejaVu Sans') # 字体label.set_size(16) # 字号label.set_style('italic') # 字体样式(常规"normal"、斜体"italic"、倾斜体"oblique")label.set_weight('bold') # 字体粗细(可选值:'light'、'normal'、'bold'、'heavy'、'black' 或数值 0-1000)label.set_color('black') # 字体颜色# 8. 调整坐标轴标题到坐标轴距离ax.xaxis.labelpad = 12 # 横轴标题距离ax.yaxis.labelpad = 12 # 纵轴标题距离# 9. 图例设置# 创建图例,放置在坐标轴右侧外部居中legend = ax.legend(frameon=False,handlelength=3.6,handletextpad=0.5,loc='center left', # 图例的“左侧中心”作为对齐点bbox_to_anchor=(1.02, 0.5) # 对齐点位于坐标轴右侧边界外(x=1.02),y=0.5 即垂直居中)# 如果想让图例放在图片内部,可以运行这部分代码# legend = ax.legend(frameon=False, # 是否显示图例的边框# handlelength =3.6, # 图例中代表线条/标记的线段长度# handletextpad =0.5, # 图例符号与文字之间的水平间距# loc='best') # 图例的放置位置('best' → 自动选择遮挡最少的位置)for text in legend.get_texts():text.set_family('DejaVu Sans') # 图例的字体text.set_size(18) # 图例的字体大小# 图形边距(这里不用调整)plt.subplots_adjust(left=0.12, right=0.95, top=0.92, bottom=0.12)
05. 图形导出
# 保存图片plt.savefig("折线图_Python.png", # 可保存为 PNG、PDF、SVG、EPS 等多种格式dpi=300, #分辨率bbox_inches='tight') # 控制保存时的边界裁剪范围(自动计算并裁剪掉图形周围多余的空白边距,使保存的图片仅包含有效内容区域)# 显示图形plt.show()

06. Python折线图模板获取方式
往期推荐



联系我们


