当前位置:首页>python>Python作图 - 边框/字体/坐标轴/坐标轴最全设置

Python作图 - 边框/字体/坐标轴/坐标轴最全设置

  • 2026-09-02 20:11:13
Python作图 - 边框/字体/坐标轴/坐标轴最全设置

0、代码设置对应的部分

下面的例子是以2行1列的子图为例子进行设置。

1、图片大小设置

python中作图的单位一般都是英寸,1英寸=2.54厘米。可以根据自己的图的数据来进行大小设置,我一般转成厘米进行设置。
width_cm = 20
height_cm = 13
width, height = width_cm / 2.54, height_cm / 2.54
fig,axes = plt.subplots(2, 1, figsize=(width, height), sharex=True)
ax=axes.flatten()

sharex=True 是让创建的多个子图(这里是 2 行 1 列的两个子图)共享同一个 x 轴。

sharey参数是共享 y 轴。

ax=axes.flatten() 将多维的子图数组「扁平化」为一维数组。

2、作图边框(颜色、大小和粗细等)

  • 大小、颜色、粗细、线型设置
# 设置边框属性
for ax in axes:
    for spine in ax.spines.values():
        spine.set_color('red')        # 设置边框颜色
        spine.set_linewidth(2)        # 设置边框粗细
        spine.set_linestyle('--')   # 可选:设置边框样式(虚线、实线等)
    ax.spines['top'].set_color('blue')    # 只设置上边颜色
    ax.spines['right'].set_linewidth(3)   # 只设置右边粗细
  • 隐藏边框,需要结合刻度仪器隐藏
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['bottom'].set_visible(False)
ax.spines['left'].set_visible(False)

# 隐藏刻度
ax.set_xticks([])  # 隐藏x轴刻度
ax.set_yticks([])  # 隐藏y轴刻度

3、坐标轴设置

  • 坐标轴范围
from matplotlib.ticker import MultipleLocator

#范围设置
ax.set_xlim(0,100)
ax.set_ylim(0,100)

#设置刻度间隔
x_major_locator = MultipleLocator(10)
ax.xaxis.set_major_locator(x_major_locator)
y_major_locator = MultipleLocator(200)
ax.yaxis.set_major_locator(y_major_locator)

# 设置坐标轴刻度的小数点
ax.xaxis.set_major_formatter(FormatStrFormatter('%.2f'))
ax.yaxis.set_major_formatter(FormatStrFormatter('%.1f'))
  • 坐标轴刻度线
import matplotlib.pyplot as plt
from matplotlib.ticker import FormatStrFormatter
#刻度字体大小
ax.tick_params(axis='both',  # 应用于x轴
               labelsize=12,  # 标签大小
               labelcolor='blue',  # 标签颜色
               labelrotation=45)  
  • axis
    :指定作用的坐标轴:'x':仅作用于 x 轴;'y':仅作用于 y 轴;'both':同时 x和 y
  • which
    :指定作用的刻度类型:'major':仅主刻度;'minor':仅副刻度;'both':同时主、副刻度
  • length
    :刻度线长度(像素),例如 length=6
  • width
    :刻度线粗细(像素),例如 width=2
  • color
    :刻度线颜色,例如 color='red' 或 color='#FF0000'
  • linestyle
    :刻度线样式,例如 linestyle='--'(虚线)、':'(点线)、'-'(实线)
  • direction
    :刻度线方向,可选 'in'(向内)、'out'(向外)、'inout'(内外都显示)
  • labelsize
    :刻度标签字体大小
  • labelcolor
    :刻度标签颜色,例如 labelcolor='blue'
  • labelrotation
    :刻度标签旋转角度(度)
  • pad
    :刻度标签与刻度线的距离(像素)

坐标轴标题

ax.set_ylabel('x轴', fontsize=10,rotation=90,labelpad=10)
ax.set_xlabel('x轴', fontsize=10,rotation=90,labelpad=10)
  • labelpad
    :控制标题与坐标轴的距离,避免文字重叠
  • rotation
    :y 轴标题默认垂直显示,设置 rotation=0 可改为水平
  • fontname
    :设置字体(如 'SimHei' 支持中文,'Times New Roman' 用于英文)
  • fontsize
    /color:分别控制字体大小和颜色,灵活调整视觉效果

4、颜色设置

颜色代码的获取

  • 普通的英文字母:如blue,gray,black等
  • hex代码
    :键盘Ctrl +Alt +A快速截屏想要的颜色获取RGB

HEX和RGB颜色代码转换参考:Python - HEX和RGB颜色代码转换

色盘:

  • 使用 Matplotlib 自定义色盘:
my_palette = [
    '#FF6B6B',  # 红色
    '#4ECDC4',  # 青色
    '#45B7D1',  # 蓝色
    '#FFA07A',  # 浅橙
    '#98D8C8'   # 薄荷绿
]
  • 默认色盘

'tab20':20 种颜色,适合更多类别的数据

'Set1'、'Set2':常用的分类色盘

'viridis'、'plasma':适合连续数据的渐变色盘

5、字体设置

  • 全局字体设置
plt.rcParams['For Sale Page'] = ['Times New Roman', 'SimSun']
# 绘图时优先使用 Times New Roman,如果没有,再使用 SimSun。
plt.rcParams['font.family'] = 'Times New Roman' #设置全局字体为新罗马
  • 中文字体设置

中文字体路径:C:\Windows\Fonts

查看电脑上可用的所有字体:控制面板-->外观和个性化-->字体

from matplotlib.font_manager import FontProperties
font = FontProperties(fname='C:/Windows/Fonts/simkai.ttf')  # 楷体
  • 常见的中文字体名称
  • 常见的字体使用
# 坐标轴标题字体
ax.set_xlabel('横轴(楷体显示)', fontproperties=font)
ax.set_ylabel('纵轴(楷体显示)', fontproperties=font)

#图例字体
ax.legend(['正弦曲线'], prop=font)  # 图例用prop参数

# 刻度标签字体
ax.set_xticklabels(ax.get_xticks(), fontproperties=font)
  • 额外添加字体设置
ax.text(1,1,'HEX:\nR:\nG:\nB:',fontsize=15,color='r',
fontproperties=lishu_font,
fontweight='bold',
linespacing=2.0,# 行间距
va='top',# 垂直对齐方式
ha='left',# 水平对齐方式
bbox=dict(facecolor='white',alpha=0.8)# 文本框背景
)
\n是代表回车的意思

6、网格线

ax.grid(True,alpha=0.2,linestyle='--',linewidth=0.5)

ax.grid() 支持的参数包括:

  • visible
    : 是否显示网格
  • which
    : 'major', 'minor', 或 'both'
  • axis
    : 'x', 'y', 或 'both'
  • color
    : 网格线颜色
  • linestyle
    : 线型 ('-', '--', '-.', ':')
  • linewidth
    : 线宽
  • alpha
    : 透明度

更精细的控制,可以分别设置x和y轴的网格:

ax.grid(True, alpha=0.2) 
ax.xaxis.grid(True, linestyle='--', alpha=0.2) 
ax.yaxis.grid(True, linestyle='--', alpha=0.2)
网格线设置

7、图例

legend_font = FontProperties(family='Times New Roman', size=9, weight='normal')
ax.legend(loc=(0, 1), frameon=False, ncol=3,handletextpad=0,labelspacing=0.3,columnspacing=0.5,prop=legend_font)

#图例隐藏
if ax.get_legend() is not None:
        ax.get_legend().set_visible(False)

loc=(0, 1):设置图例的位置。loc 可以是一个字符串(如 'upper right')或一个坐标( (0, 1))。

(0, 1) 表示图例的左上角位于坐标轴的左上角。0 和 1 分别对应 x 和 y 轴的相对坐标,范围是 [0, 1],表示从轴的左下角到右上角。

frameon=False:这个参数决定图例是否有边框。False 表示不显示边框,True 表示显示边框。

handletextpad=0:控制图例标记(即图例中的小方块或线条)与文本之间的水平间距。0 表示没有间距。

labelspacing=0.3:设置图例中各行标签之间的垂直间距。0.3 是相对于字体大小的倍数。

columnspacing=0.5:设置图例列之间的水平间距。0.5 是相对于字体大小的倍数。

borderpad:控制图例边框和内容之间的距离。

labelspacing:控制每个标签之间的间距。

8、多子图设置

ax.set_visible(False)#隐藏没有用到的子图
plt.tight_layout()#让图片更加紧凑
plt.subplots_adjust(wspace=0.1,hspace=0.1)#wspace是水平间隔,hspace是竖直间隔
补柜子则图的设置参考之前的文章:
Python-组合图绘制(散点图为例)2 赞同 · 0 评论 

8、图片保存

  • jpeg输出和png的区别:
    (主要是输出背景不同,png可以输出透明背景)

JPEG:文件体积小,但放大后可能出现线条 / 文字模糊(有损压缩),适合网页展示、快速预览。

PNG:文件体积较大,但细节无损(线条、文字清晰),支持透明背景,适合论文、海报、需要叠加的场景。

  • jpeg输出
plt.savefig(
    'function_curve.jpg',  # 输出文件名(后缀用.jpg或.jpeg均可)
    dpi=300,
    quality=80,
    bbox_inches='tight',
    facecolor='white'  # 显式设置背景为白色(JPEG不支持透明,默认白色)
)

  • png格式输出
plt.savefig( 'bar_chart_transparent.png',  # 输出文件名(后缀必须为.png)
    dpi=300,
    transparent=True,  # 关键:开启透明背景
    bbox_inches='tight',
    edgecolor='none'  # 避免透明背景下出现多余边框
)
  • 设置子图间距
plt.subplots_adjust(left=0.1, right=0.9, top=0.9, bottom=0.1, hspace=0.3, wspace=0.3)

left:子图距离左边的间距(默认值为 0.125)
right:子图距离右边的间距(默认值为 0.9)
top:子图距离上边的间距(默认值为 0.9)
bottom:子图距离下边的间距(默认值为 0.1)
hspace:子图之间的垂直间距
wspace:子图之间的水平间距

原文链接:https://zhuanlan.zhihu.com/p/1952866995717539579

版权声明

来源:【lne的试验记录】知乎文章。内容仅做学术分享之用,不代表本号观点,版权归原作者所有,若涉及侵权等行为,请联系我们删除,万分感谢!

最新文章

随机文章