python绘图参数

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.font_manager as fm  # 导入字体管理模块

# ---------------------- 1. 数据准备 ----------------------
NT = [2, 3, 4, 5, 6, 7, 8]  # x轴:专家数量 (NT)
ATE = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6 0.7]  # 左y轴:平均轨迹误差(ATE,值越小越好)
Param = [1, 2, 3, 4, 5, 6, 7]  # 右y轴:参数数量 (M,值越小越好)

# ---------------------- 2. 绘图配置 ----------------------
# 替换为你的SimHei.ttf实际路径(根据之前的路径设置)
simhei_path = "/home/lbw/anaconda3/envs/uniad/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/simhei.ttf"
# 配置中文字体
plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC"]
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题

# 1. 定义图片尺寸(可任意调整,字体大小会自动适配)
fig_width = 10  # 图片宽度(英寸)
fig_height = 8  # 图片高度(英寸)
# fig, ax = plt.subplots(figsize=(fig_width, fig_height))

# 2. 定义相对比例系数(根据需求调整,控制字体与图片的比例)
title_ratio = 0.03    # 标题字体占宽度的比例
label_ratio = 0.03     # 坐标轴标签占宽度的比例
tick_ratio = 0.03    # 刻度标签占宽度的比例
annot_ratio = 0.03   # 热图注释占宽度的比例
cbar_ratio = 0.03     # 颜色条刻度占宽度的比例
legend_ratio=0.03      # 题注占宽度的比例
line_width_ratio=0.004 #线宽
mark_ratio=0.015
# 3. 计算相对字号(转换为pt单位:1英寸=72pt)
title_size = fig_width * title_ratio * 72
label_size = fig_width * label_ratio * 72
tick_size = fig_width * tick_ratio * 72
annot_size = fig_width * annot_ratio * 72
cbar_size = fig_width * cbar_ratio * 72
legend_size = fig_width * legend_ratio * 72
line_width = fig_width*line_width_ratio*72
mark_width=fig_width * mark_ratio * 72
# 创建图形和轴
# fig, ax1 = plt.subplots(figsize=(10, 8), dpi=300)  # 学术论文级别的图尺寸和分辨率
fig, ax1 = plt.subplots(figsize=(fig_width, fig_height),dpi=300)


ax2 = ax1.twinx()  # 创建右侧y轴
# ---------------------- 3. 绘制曲线 ----------------------
# 左y轴:ATE(蓝色,圆形标记,实线)
line_ate, = ax1.plot(NT, ATE,
                     color='tab:blue',
                     marker='o',
                     linestyle='-',
                     label='ATE',  # 图例改为中文
                     linewidth=line_width)

# 右y轴:参数数量(红色,方形标记,虚线)
line_param, = ax2.plot(NT, Param,
                       color='tab:red',
                       marker='s',
                       linestyle='--',
                       label='参数数量 (M)',  # 图例改为中文
                       linewidth=line_width)

# ---------------------- 4. 坐标轴设置 ----------------------
# x轴:显示所有NT值
ax1.set_xticks(NT)
ax1.set_xlabel('专家数量 ($N_T$)', fontsize=label_size, fontweight='bold')  # x轴标签改为中文

# 左y轴:ATE(蓝色,保留4位小数)
ax1.set_ylabel('ATE(°)', color='tab:blue', fontsize=label_size, fontweight='bold')  # 左y轴标签改为中文
ax1.tick_params(axis='y', labelcolor='tab:blue', labelsize=tick_size)
ax1.yaxis.set_major_formatter('{:.4f}'.format)  # 格式:0.1234




# 右y轴:参数数量(红色,保留3位小数)
ax2.set_ylabel('模型参数 (M)', color='tab:red', fontsize=tick_size, fontweight='bold')  # 右y轴标签改为中文
ax2.tick_params(axis='y', labelcolor='red', labelsize=tick_size)
ax2.yaxis.set_major_formatter('{:.3f}'.format)  # 格式:11.659

# ---------------------- 5. 图例和美观设置 ----------------------
# 合并两侧图例,避免重叠
handles = [line_ate, line_param]
labels = [h.get_label() for h in handles]
# ax1.legend(handles, labels, loc='upper left', fontsize=10, framealpha=0.8)
ax1.legend(handles, labels,
           loc='upper left',  # 图例的锚点为左上角
           bbox_to_anchor=(0.1, 1),  # x=0.2(向右挪),y=1(保持顶部对齐)
           fontsize=legend_size,
           framealpha=0.8)

ax1.tick_params(axis='x', labelsize=tick_size)  # 新增语句

# 网格线(仅左y轴,避免杂乱)
ax1.grid(linestyle='--', alpha=0.4, color='gray')

# 标题(根据论文场景调整)
# plt.title('不同$N_T$下平均轨迹误差(ATE)与模型参数的对比',
#           fontsize=14, fontweight='bold', pad=15)  # 标题改为中文

# 紧凑布局,防止标签被截断
plt.tight_layout()

# ---------------------- 6. 保存/显示 ----------------------
plt.savefig('NT_ATE_Param.png', format='png',bbox_inches='tight')
# plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值