SkillAgentSearch skills...

Pyfastpaper

适合科研人员的Python绘图工具

Install / Use

/learn @Jesse-tien/Pyfastpaper
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

第一部分:基础教程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

View on GitHub
GitHub Stars16
CategoryDevelopment
Updated8d ago
Forks4

Languages

Jupyter Notebook

Security Score

85/100

Audited on Mar 22, 2026

No findings