Pyfastpaper
适合科研人员的Python绘图工具
Install / Use
/learn @Jesse-tien/PyfastpaperREADME
第一部分:基础教程pyfastpaper 快速上手教程(针对Python 0基础的科研人员)
0 导入工具包
Python下载pyfastpaper:
pip install pyfastpaper
在你要存放图片的文件夹下右键,点击在终端中打开(T)(Windows 11系统),出现“黑窗”(术语为DOS界面),在里面输入jupyter notebook,按下回车,浏览器弹出,启动Jupyter,将该黑窗口最小化(千万别关!),浏览器编代码即可。
from pyfastpaper import * # 固定写法
%config InlineBackend.figure_format = 'retina' # 提高分辨率
第一部分:提供数据来描点——data_lines函数
1.1 单数据描点
例题1
# 以方括号(列表、numpy数组均可)形式给出数据,并给这组数据起个名字:
data = {
'旅游人次':[1230, 45789, 2600, 320, 991480, 65780,
89990, 70001, 6423, 415000, 340, 102]
}
data_lines(data)
<div style="display: flex;">
<div style="flex: 1; text-align: center;">
<img src="https://github.com/Jesse-tien/pyfastpaper/blob/6a09e651d801424aceeaeda4e40acd2ead258420/src/data1.png?raw=true" style="display:inline; width:70%;"/>
</div>
</div>
例题2
# 以方括号(列表、numpy数组均可)形式给出数据,并给这组数据起个名字:
data = {
'旅游人次': [1230, 45789, 2600, 320, 991480,
65780, 89990, 70001, 6423, 415000, 340, 102]
}
# 给横轴添加刻度标签,注意要和data长度一致!
label_x = ['2020-1', '2020-2', '2020-3', '2020-4', '2020-5',
'2020-6', '2020-7', '2020-8', '2020-9', '2020-10',
'2020-11', '2020-12']
# 自定义xy轴名称:
x_name = '月总旅游人次'
y_name = '月份'
# 保存路径
save_dir = 'outputs/data_sigle.tiff'
# 图片大小
figsize = [7, 4] # 宽 高
# 字号大小
fsize = 13
# x轴刻度旋转角度
xt_rotation = 45
data_lines(data, label_x=label_x, x_name=x_name, y_name=y_name,
save_dir=save_dir, fsize=fsize,
figsize=figsize, xt_rotation=xt_rotation)
<div style="display: flex;">
<div style="flex: 1; text-align: center;">
<img src="https://github.com/Jesse-tien/pyfastpaper/blob/6a09e651d801424aceeaeda4e40acd2ead258420/src/data_sigle.png?raw=true" style="display:inline; width:90%;"/>
</div>
</div>
1.2 多数据描点
# 以方括号(列表、numpy数组均可)形式给出数据,并给这组数据起个名字:
data = {
'音乐1': [1, 2, 3, 3.5, 5, 6, 7, 8],
'音乐2': [8, 7, 6, 5, 3.5, 3, 2, 1],
'音乐3': [1, 1, 5, 5, 6, 6, 5, 0],
'音乐4': [3.5, 3.5, 3, 3, 2, 2, 1, 0],
}
# 给横轴添加刻度标签,注意要和data长度一致!
label_x = [1, 2, 3, 4, 5, 6, 7, 8]
# 自定义xy轴名称:
x_name = '节拍'
y_name = '音调'
# 保存路径
save_dir = 'outputs/data_multi.tiff'
# 图片大小
figsize = [7, 4] # 宽 高
# 字号大小
fsize = 13
# x轴刻度旋转角度
xt_rotation = 0
# 图例位置和列数
location='best'
ncol=4
data_lines(data, label_x=label_x, x_name=x_name, y_name=y_name,
save_dir=save_dir, fsize=fsize, figsize=figsize,
xt_rotation=xt_rotation,location=location, ncol=ncol)
<div style="display: flex;">
<div style="flex: 1; text-align: center;">
<img src="https://github.com/Jesse-tien/pyfastpaper/blob/6a09e651d801424aceeaeda4e40acd2ead258420/src/data_multi.png?raw=true" style="display:inline; width:90%;"/>
</div>
</div>
第二部分:根据函数表达式数值仿真
2.1 定义数学符号,写出要画图的表达式
# 定义符号
c_n, c_r, delta, e_n, e_r, p_e, E, k, b, alpha = symbols(
'c_n, c_r, delta, e_n, e_r, p_e, E, k, b, alpha')
# 四个表达式
Pir_NW = E*p_e+(k*(alpha*delta*(c_n+e_n*p_e)-
(c_r+e_r*p_e))**2)/(8*(k+alpha*delta*(1-alpha*delta))**2)
Pir_BW = E*p_e + ( k*(delta*(c_n+e_n*p_e)-
(c_r+e_r*p_e+b))**2 )/( 8*(k+delta-delta**2)**2)
Pir_NS = E*p_e + ((k+2*alpha*delta)*(alpha*delta*(c_n+e_n*p_e)-
(c_r+e_r*p_e))**2 )/( 8*(k+alpha*delta*(2-alpha*delta))**2)
Pir_BS = E*p_e + ( (k+2*delta)*(delta*(c_n+e_n*p_e)-
(c_r+e_r*p_e+b))**2 )/( 8*(k+2*delta-delta**2)**2)
# 工具包内附赠的latex工具mathshow,用于将latex显示为Jupyter内的公式。
mathshow(r'\begin{equation} \pi_r^{NW}=' + latex(Pir_NW) + r'\tag{1} \end{equation}')
mathshow(r'\begin{equation} \pi_r^{BW}=' + latex(Pir_BW) + r'\tag{2} \end{equation}')
mathshow(r'\begin{equation} \pi_r^{NS}=' + latex(Pir_NS) + r'\tag{3} \end{equation}')
mathshow(r'\begin{equation} \pi_r^{BS}=' + latex(Pir_BS) + r'\tag{4} \end{equation}')
$\displaystyle \begin{equation} \pi_r^{NW}=E p_{e} + \frac{k \left(\alpha \delta \left(c_{n} + e_{n} p_{e}\right) - c_{r} - e_{r} p_{e}\right)^{2}}{8 \left(\alpha \delta \left(- \alpha \delta + 1\right) + k\right)^{2}}\tag{1} \end{equation}$
$\displaystyle \begin{equation} \pi_r^{BW}=E p_{e} + \frac{k \left(- b - c_{r} + \delta \left(c_{n} + e_{n} p_{e}\right) - e_{r} p_{e}\right)^{2}}{8 \left(- \delta^{2} + \delta + k\right)^{2}}\tag{2} \end{equation}$
$\displaystyle \begin{equation} \pi_r^{NS}=E p_{e} + \frac{\left(2 \alpha \delta + k\right) \left(\alpha \delta \left(c_{n} + e_{n} p_{e}\right) - c_{r} - e_{r} p_{e}\right)^{2}}{8 \left(\alpha \delta \left(- \alpha \delta + 2\right) + k\right)^{2}}\tag{3} \end{equation}$
$\displaystyle \begin{equation} \pi_r^{BS}=E p_{e} + \frac{\left(2 \delta + k\right) \left(- b - c_{r} + \delta \left(c_{n} + e_{n} p_{e}\right) - e_{r} p_{e}\right)^{2}}{8 \left(- \delta^{2} + 2 \delta + k\right)^{2}}\tag{4} \end{equation}$
2.2 画单条曲线图——draw_lines函数
# 给表达式起个名字,写成字典的形式:
expressions = {r'$\pi_r^{NS}$': Pir_NS}
# 参数赋值:
assigns = {
c_n: 0.2,
c_r: 0.1,
delta: 0.8,
e_n: 1,
e_r: 0.6,
p_e: 0.1,
E: 2,
k: 1.1,
b:0.05
}
# 要分析的参数,及其取值范围:
the_var = alpha
ranges = [0.7, 0.9, 0.02] # [起始值, 终止值, 间隔]。
# 横纵轴的名字:
x_name = r'$\rm{(b) \ Parameter \ } \alpha$' # 可以写LaTex公式,用"$ $"括上。
y_name = r'$\pi_r^{NS}$'
# 图片保存路径、文件名
save_dir = r'outputs\sigle_line.tiff'
# y轴标签旋转角度
yrotation = 0
# 固定写法:
draw_lines(expressions=expressions, assigns=assigns, the_var=the_var, ranges=ranges,
x_name=x_name, y_name=y_name, save_dir=save_dir, yrotation=yrotation,
ylabelpad=14)
<div style="display: flex;">
<div style="flex: 1; text-align: center;">
<img src="https://github.com/Jesse-tien/pyfastpaper/blob/6a09e651d801424aceeaeda4e40acd2ead258420/src/sigle_line.png?raw=true" style="display:inline; width:70%;"/>
</div>
</div>
2.3 多条曲线图——draw_lines函数
# 给表达式起个名字,写成字典的形式:
expressions = {
r'$\pi_r^{NW}$': Pir_NW,
r'$\pi_r^{BW}$': Pir_BW,
r'$\pi_r^{NS}$': Pir_NS,
r'$\pi_r^{BS}$': Pir_BS,
}
# 参数赋值:
assigns = {
c_n: 0.2,
c_r: 0.1,
delta: 0.8,
e_n: 1,
e_r: 0.6,
p_e: 0.1,
E: 2,
k: 1.1,
alpha:0.9
}
# 要分析的参数,及其取值范围:
the_var = b
ranges = [0, 0.08, 0.01] # [起始值, 终止值, 间隔]。
# 横纵轴的名字:
x_name = r'$\rm{(a) \ Parameter \ } b$'
y_name = r'$\pi_r$'
# 图片保存路径、文件名
save_dir = r'outputs/mutiple_line.tiff'
# 固定写法:
draw_lines(expressions=expressions, assigns=assigns, the_var=the_var,
ranges=ranges, x_name=x_name, y_name=y_name, save_dir=save_dir)
<div style="display: flex;">
<div style="flex: 1; text-align: center;">
<img src="https://github.com/Jesse-tien/pyfastpaper/blob/6a09e651d801424aceeaeda4e40acd2ead258420/src/mutiple_line.png?raw=true" style="display:inline; width:70%;"/>
</div>
</div>
2.4 画单片三维图——draw_3D函数
# 给表达式起个名字,写成字典的形式:
expressions = {r'$\pi_r^{NS}$': Pir_NS}
# 参数赋值:
assigns = {
c_n: 0.2,
c_r: 0.1,
delta: 0.8,
e_n: 1,
e_r: 0.6,
p_e: 0.1,
E: 2,
k: 1.1
}
# 要分析的参数,及其取值范围:
the_var_x = alpha
start_end_x = [0.7, 0.8] # [起始值, 终止值]。
the_var_y = b
start_end_y = [0, 0.08] # [起始值, 终止值]。
# xyz轴的名字:
x_name = r'$\alpha$'
y_name = r'$b$'
z_name = r'$\pi_r^{NS}$'
# 图片保存路径、文件名
save_dir = r'outputs\sigle_3d.tiff'
# 固定写法:
draw_3D(expressions=expressions, assigns=assigns, the_var_x=the_var_x,
start_end_x=start_end_x, the_var_y=the_var_y,
start_end_y=start_end_y, x_name=x_name, y_name=y_name,
z_name=z_name, save_dir=save_dir, zrotation=0, colors=['#707070'])
# 说明:由于Jupyter窗口大小不够,显示不全,但导出的`sigle_3d.tiff`文件是全的,可以放心用!
<div style="display: flex;">
<div style="flex: 1; text-align: center;">
<img src="https://github.com/Jesse-tien/pyfastpaper/blob/6a09e651d801424aceeaeda4e40acd2ead258420/src/sigle_3d.png?raw=true" style="display:inline; width:70%;"/>
</div>
</div>
2.5 画多片三维图——draw_3D函数
# 给表达式起个名字,写成字典的形式:
expressions = {
r'$\pi_r^{NW}$': Pir_NW,
r'$\pi_r^{BW}$': Pir_BW,
r'$\pi_r^{NS}$': Pir_NS,
r'$\pi_r^{BS}$': Pir_BS,
}
# 参数赋值:
assigns = {
c_n: 0.2,
c_r: 0.1,
delta: 0.8,
e_n: 1,
e_r: 0.6,
p_e: 0.1,
E: 2,
k: 1.1
}
# 要分析的参数,及其取值范围:
the_var_x = alpha
start_end_x = [0.7, 0.8] # [起始值, 终止值]。
the_var_y = b
start_end_y = [0, 0.08] # [起始值, 终止值]。
# xyz轴的名字:
x_name = r'$\alpha$'
y_name = r'$b$'
z_name = r'$\pi_r$'
# 图片保存路径、文件名
save_dir = r'outputs\muti_3d.tiff'
# 固定写法:
draw_3D(expressions=expressions, assigns=assigns, the_var_x=the_var_x,
start_end_x=start_end_x, the_var_y=the_var_y,
start_end_y=start_end_y, x_name=x_name, y_name=y_name, z_name=z_name,
save_dir=save_dir, color_alpha=0.8, precision=1000, zrotation=0, ncol=4)
<div style="display: flex;">
<div style="flex: 1; text-align: center;">
<img src="https://github.com/Jesse-tien/pyfastpaper/blob/6a09e651d801424aceeaeda4e40acd2ead258420/src/muti_3d.png?raw=true" style="display:inline; width:70%;"/>
</div>
</div>
2.6 两个参数影响下,最大函数值所在区域图——draw_max_area函数
# 给表达式起个名字,写成字典的形式:
expressions = {
r'$\pi_r^{NW}$': Pir_NW,
r'$\pi_r^{BW}$': Pir_BW,
r'$\pi_r^{NS}$': Pir_NS,
r'$\pi_r^{BS}$': Pir_BS,
}
# 参数赋值:
assigns = {
c_n: 0.2,
c_r: 0.1,
delta: 0.8,
e_n: 1,
e_r: 0.6,
p_e: 0.1,
E: 2,
k: 1.1
}
# 要分析的参数,及其取值范围:
the_var_x = alpha
start_end_x = [0.7, 0.8] # [起始值, 终止值]。
the_var_y = b
start_end_y = [0, 0.08] # [起始值, 终止值]。
# xyz轴的名字:
x_name = '$\\alpha$ \n $\\rm{(b) \\ With \\ blockchain}$'
y_name = r'$b$'
# 图片保存路径、文件名
save_dir = r'outputs\max_area.tiff'
# 其它细节(可选,默认值即可)
texts = [r'$\rm{NW}$', r'$\rm{BW}$', r'$\rm{NS}$', r'$\rm{BS}$'] # 和表达式expressions对应处的函数值若最大,则标记的文本
# 固定写法:
draw_max_area(expressions=expressions, assigns=assigns, the_var_x=the_var_x, start_end_x=start_end_x, the_var_y=the_var_y,
start_end_y=start_end_y, x_name=x_
Related Skills
node-connect
342.5kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
85.3kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
342.5kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
342.5kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
