
下面的例子是以2行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() 将多维的子图数组「扁平化」为一维数组。
# 设置边框属性
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轴刻度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和 ywhich'major':仅主刻度;'minor':仅副刻度;'both':同时主、副刻度lengthlength=6widthwidth=2colorcolor='red' 或 color='#FF0000'linestylelinestyle='--'(虚线)、':'(点线)、'-'(实线)direction'in'(向内)、'out'(向外)、'inout'(内外都显示)labelsizelabelcolorlabelcolor='blue'labelrotationpad坐标轴标题
ax.set_ylabel('x轴', fontsize=10,rotation=90,labelpad=10)
ax.set_xlabel('x轴', fontsize=10,rotation=90,labelpad=10)labelpadrotationrotation=0 可改为水平fontname'SimHei' 支持中文,'Times New Roman' 用于英文)fontsizecolor:分别控制字体大小和颜色,灵活调整视觉效果颜色代码的获取

HEX和RGB颜色代码转换参考:Python - HEX和RGB颜色代码转换
色盘:
my_palette = [
'#FF6B6B', # 红色
'#4ECDC4', # 青色
'#45B7D1', # 蓝色
'#FFA07A', # 浅橙
'#98D8C8' # 薄荷绿
]'tab20':20 种颜色,适合更多类别的数据
'Set1'、'Set2':常用的分类色盘
'viridis'、'plasma':适合连续数据的渐变色盘
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是代表回车的意思ax.grid(True,alpha=0.2,linestyle='--',linewidth=0.5)ax.grid() 支持的参数包括:
visiblewhichaxiscolorlinestylelinewidthalpha更精细的控制,可以分别设置x和y轴的网格:
ax.grid(True, alpha=0.2)
ax.xaxis.grid(True, linestyle='--', alpha=0.2)
ax.yaxis.grid(True, linestyle='--', alpha=0.2)
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:控制每个标签之间的间距。
ax.set_visible(False)#隐藏没有用到的子图
plt.tight_layout()#让图片更加紧凑
plt.subplots_adjust(wspace=0.1,hspace=0.1)#wspace是水平间隔,hspace是竖直间隔
补柜子则图的设置参考之前的文章: Python-组合图绘制(散点图为例)2 赞同 · 0 评论
JPEG:文件体积小,但放大后可能出现线条 / 文字模糊(有损压缩),适合网页展示、快速预览。
PNG:文件体积较大,但细节无损(线条、文字清晰),支持透明背景,适合论文、海报、需要叠加的场景。
plt.savefig(
'function_curve.jpg', # 输出文件名(后缀用.jpg或.jpeg均可)
dpi=300,
quality=80,
bbox_inches='tight',
facecolor='white' # 显式设置背景为白色(JPEG不支持透明,默认白色)
)
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:子图之间的水平间距
版权声明