快速绘图格式化工具库dsPltTool
引入
from dsPltTool import *
mst()多格式快速设定
参数
参数 | 说明 | 默认 | 类型 |
---|---|---|---|
ax |
subplot的子ax | plt.gca() |
可选参数 |
label |
x/y轴label,[xlabel , ylabel ] |
无 | 可选参数 |
xlabel |
x轴label,用作单轴设定 | 无 | 可选参数 |
ylabel |
y轴label,用作单轴设定 | 无 | 可选参数 |
title |
图标题 | 无 | 可选参数 |
xlim |
x轴坐标范围 [xmin , xmax ] |
自动 | 可选参数 |
ylim |
y轴坐标范围 [ymin , ymax ] |
自动 | 可选参数 |
style |
字体风格,"Times" /"Arial" |
"Times" |
可选参数 |
fontsize |
label字体大小 | 10 | 可选参数 |
legend |
是否有图例,True /False |
False |
可选参数 |
rotate |
x坐标文字旋转45度,True /False |
False |
可选参数 |
axis_width |
坐标轴线宽度 | 1 | 可选参数 |
half_axis |
是否显示一半坐标,True /False |
False |
可选参数 |
Tips: xlabel
/ylabel
设置优先级高于label
使用例
单图
设定坐标名称与图标题
mst(label=["x","y"], title="title")
subplot
多参数设定
label = ['Axis xx', 'Axis yy']
mst(axes[1], label=label, title='Figure B', legend=True, style="other", xlim = [0,100000], fontsize=10, axis_width=0.5, half_axis=True,rotate=True)
注意事项
第一次使用 Times New Roman 字体时,如使用Mac系统可能无法映射字体。可复制以下代码到Python环境中运行一次即可。
import matplotlib
del matplotlib.font_manager.weight_dict['roman']
matplotlib.font_manager._rebuild()
使用legend时,需要在绘制
plot
时给定label
指定名称,否则将显示内存地址。
plt.plot(x, y , label='Line Name')
x_bf()/y_bf() 主副坐标/自定义坐标间隔
参数
参数 | 说明 | 类型 | 默认 |
---|---|---|---|
major |
主坐标步长 | 必要参数 | - |
num |
主坐标之间副坐标数 | 可选参数 | 0 |
dot |
主坐标保留小数点个数 | 可选参数 | 1 |
ax |
subplot的子ax | 可选参数 | plt.gca() |
使用例
单图
设定y轴10为间隔的主坐标,保留两位小数
y_bf(10,dot=2)
subplot
设定x轴步长为10000主坐标,包含5个副坐标
x_bf(ax=axes[1],major= 10000, num=5, dot=0)
reverse_direction() 翻转坐标指示
构建MATLAB风格的坐标轴 必须在所有的plt操作之前使用
参数
参数 | 说明 | 类型 | 默认 |
---|---|---|---|
axis |
需要翻转的坐标轴 | 可选参数 | "xy" |
使用例
翻转x轴坐标指示:
reverse_direction("x")
同时翻转x轴、y轴:
reverse_direction()
global_serif() 设置全局使用Times字体
必须在所有的plt操作之前使用 使colorbar也可使用Times New Roman字体
参数
无
使用例
设置全局使用Times字体:
global_serif()
附:代码
文件名:dsPltTool.py
import matplotlib.pyplot as plt
import matplotlib
import numpy as np
from matplotlib.ticker import MultipleLocator, FormatStrFormatter
'''
#### IMPORTANT #####
For using font of Times new roman
COPY these two lines code below
and MOVE to main program file
for the FIRST TIME runing
del matplotlib.font_manager.weight_dict['roman']
matplotlib.font_manager._rebuild()
'''
# multi_set_tool
def mst(ax=[], label=[], xlabel="", ylabel="",title=[], xlim=[], ylim=[], style="Times", fontsize=10, width_line=1 ,legend=False, rotate=False, axis_width=1, half_axis=False):
if not ax:
ax = plt.gca()
if style == "Times":
font1 = {'family' : 'Times New Roman', 'size': fontsize,}
font2 = {'family' : 'Times New Roman', 'size': fontsize*1.2,}
font3 = {'family' : 'Times New Roman', 'size': fontsize*1.4,}
plt.tick_params(labelsize=fontsize)
labels = ax.get_xticklabels() + ax.get_yticklabels()
[label.set_fontname('Times New Roman') for label in labels]
elif style == "Arial":
font1 = {'family' : 'Arial', 'size': fontsize,}
font2 = {'family' : 'Arial', 'size': fontsize*1.2,}
font3 = {'family' : 'Arial', 'size': fontsize*1.4,}
plt.tick_params(labelsize=fontsize)
labels = ax.get_xticklabels() + ax.get_yticklabels()
[label.set_fontname('Arial') for label in labels]
else:
font1 = {'size': fontsize,}
font2 = {'size': fontsize*1.2,}
font3 = {'size': fontsize*1.4,}
plt.tick_params(labelsize=fontsize)
if half_axis:
for axis in ['bottom','left']:
ax.spines[axis].set_linewidth(axis_width)
for axis in ['top', 'right']:
ax.spines[axis].set_linewidth(0)
else:
for axis in ['top','bottom','left','right']:
ax.spines[axis].set_linewidth(axis_width)
if title:
ax.set_title(title,font2)
if len(label) == 2:
ax.set_xlabel(label[0],font2)
ax.set_ylabel(label[1],font2)
if xlabel:
ax.set_xlabel(xlabel, font2)
if ylabel:
ax.set_ylabel(ylabel, font2)
if legend:
legend = ax.legend(prop=font1)
if len(xlim) == 2:
ax.set_xlim(xlim)
if rotate:
ax.set_xticklabels(ax.get_xticks(),rotation=45)
if len(ylim) == 2:
ax.set_ylim(ylim)
def x_bf(major, num=0, dot=1, ax=[]):
if not ax:
ax = plt.gca()
if num <= 0:
minor = major
else:
minor = major / num
format_str = '%1.' + str(dot) + 'f'
xmajorLocator = MultipleLocator(major)
xmajorFormatter = FormatStrFormatter(format_str)
xminorLocator = MultipleLocator(minor)
ax.xaxis.set_major_locator(xmajorLocator)
ax.xaxis.set_minor_locator(xminorLocator)
ax.xaxis.set_major_formatter(xmajorFormatter)
def y_bf(major, num=0, dot=1, ax=[]):
if not ax:
ax = plt.gca()
if num <= 0:
minor = major
else:
minor = major / num
format_str = '%1.' + str(dot) + 'f'
ymajorLocator = MultipleLocator(major)
ymajorFormatter = FormatStrFormatter(format_str)
yminorLocator = MultipleLocator(minor)
ax.yaxis.set_major_locator(ymajorLocator)
ax.yaxis.set_minor_locator(yminorLocator)
ax.yaxis.set_major_formatter(ymajorFormatter)
def reverse_direction(axis="xy"):
if axis == "x":
plt.rcParams['xtick.direction'] = 'in'
elif axis =="y":
plt.rcParams['ytick.direction'] = 'in'
else:
plt.rcParams['xtick.direction'] = 'in'
plt.rcParams['ytick.direction'] = 'in'
def global_serif():
plt.rcParams['font.family'] = 'Times New Roman'