当前位置:首页>python>Python绘图第1期——折线图(带标记点)

Python绘图第1期——折线图(带标记点)

  • 2026-09-02 23:07:09
Python绘图第1期——折线图(带标记点)

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

本文分为以下6个部分(获取方式在 “06 ”部分):

00.数据组织格式

数据一共3个字段:横坐标“x”、纵坐标“y”、组别“group”。

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. 数据读取

这里直接读取工作空间下的"data.xlsx"文件。
# 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. 绘制图形

这部分我们主要进行折线图中参数的设置与图形绘制。其中plt.plot()函数根据提供的 x 和 y 数据,同时绘制折线(连线)和数据点标记(marker)。
关于线型和标记点对应的代码,我们在下面给出。
这里一定要预设图片大小,这样后面我们调整图形的细节才是有意义的。图片尺寸是什么样子,应该取决于你的PPT或word中给这张图预留了多大空间。
其他需要注意的地方我在注释中已经写的很清楚,大家细心读注释即可。
# =============================================================================# 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. 图形导出

这里只需要强调一点:在Python里,先保存图片,再显示图片!
不然你就会得到一张空白画布!
# 保存图片plt.savefig("折线图_Python.png",   # 可保存为 PNG、PDF、SVG、EPS 等多种格式            dpi=300,              #分辨率            bbox_inches='tight')  # 控制保存时的边界裁剪范围(自动计算并裁剪掉图形周围多余的空白边距,使保存的图片仅包含有效内容区域)# 显示图形plt.show()
运上面行代码,得出下图:

06. Python折线图模板获取方式

公众号后台回复关键词 py折线图
即可获取“代码”+“示例数据”+“效果图”
少一个字都不行哦~(直接复制红色关键词,劝你别自己输入)

往期推荐

联系我们

欢迎大家添加微信以及评论交流~
请转发给你周围需要的人~
将本公众号设为星标,第一时间获取后续推文~

#Python#折线图#科研绘图#Python绘图#Python画折线图#科研#研究生

最新文章

随机文章