无脑简单学术专业绘图工具——Easyfig 使用说明【已更新至3.7.0版本!】
[TOC]
一、它能干啥?
我开发的这个工具名字叫Easyfig,字面意思“容易画图”,它能干啥?简单说,就是给没有编程基础、商学院管科专业学生使用,用于快速做数值仿真的工具,可以绘制的数值仿真形式包括:
(1)单个参数的分析
图:示例论文 Blockchain adoption and mode selection strategies for remanufacturing supply chain under cap-and-trade policy, Computers & Industrial Engineering, 192, 2024, 110246, https://doi.org/10.1016/j.cie.2024.110246.
(2)两个参数同时分析-最优模式所在区域绘制
图:示例论文 Blockchain adoption and mode selection strategies for remanufacturing supply chain under cap-and-trade policy, Computers & Industrial Engineering, 192, 2024, 110246, https://doi.org/10.1016/j.cie.2024.110246.
(3)两个参数同时分析-各个区域利润函数之间的详细大小关系
图:示例论文 E-retailer information sharing with suppliers online selling mode, Information Sciences 622 (2023) 1252-1272. https://doi.org/10.1016/j.ins.2022.10.094.
(4)两个参数同时分析-三维图
图:示例论文 Recycling mode selection and carbon emission reduction decisions for a multi-channel closed-loop supply chain of electric vehicle power battery under cap-and-trade policy, Journal of Cleaner Production 375 (2022) 134060.https://doi.org/10.1016/j.jclepro.2022.134060.
二、如何安装和启动?
第一步:安装Python;第二步:引入我开发的easyfig包。
2.1 安装Python【如果电脑已经安装3.8版本以上的Python,则此步跳过】
进入官网https://www.python.org/ ,点击Downloads,安装最新版本Python即可(例如3.13.1)。
图:Python官网
2.2 安装easyfig
对于Windows用户,按下组合键,Win+R,输入cmd打开命令窗口(黑的),然后在命令窗口内输入:
pip install easyfig==3.7.0
回车即可,如图所示,等待安装完成。(注意:1.要联网;2.关掉梯子VPN)如果中途出现红字,说明因网络原因安装失败,检查网络,并重新做此步即可。
图:Win+R,输入
cmd回车
2.3 启动easyfig
对于Windows用户,按下组合键“Win+R”,输入“easyfig”直接回车即可!如果是Windows 11,直接在电脑自带的搜索框中搜索“easyfig”也可以打开,非常方便(如图)!还可以建立桌面快捷方式,具体见视频。
图:Windows 11 打开easyfig快速方法
下面是视频演示:【或者点击此处播放】
视频:安装和启动easyfig
三、如何使用?【 针对完全没学过Python的同学,无脑使用界面即可】
本工具独创UI界面向导,无需输入代码,即可完成仿真绘图!
我们以学术论文:
Yanliang Zhang, Jingrui Zhang, Yanjie Zhou, Huadong Zhao, Yanpei Cheng, Blockchain adoption and mode selection strategies for remanufacturing supply chain under cap-and-trade policy, Computers & Industrial Engineering, 192, 2024, 110246, https://doi.org/10.1016/j.cie.2024.110246.
为例,进行演示。
作者提出了四种模式,利润函数分别为: $$ \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} $$
$$ \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} $$
$$ \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} $$
$$ \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} $$
参数默认赋值为:
3.1 表达式快速输入的技巧
首先,在“表达式输入”框中,输入四个表达式,格式为:
表达式名称 = 表达式
其中,表达式名称可以写单词、汉字以及空格,也可以写LaTex形式(LaTeX部分的两侧需要用$包裹)。例如:“模式A”、“$Mode_A$”、“利润 $\pi_r^{NW}$”等。比较随意,表达式名称决定了图例是啥。对于LaTex的写法,请见附录A。
表达式书写要求:
(1)数学符号只能由英文字母、下划线(表示下角标)和数字组成,并且数字不能开头,希腊字母写对应的英文单词(千万注意不是LaTeX!),特别地, λ 要写为“lamda”。例如:“p_e”、“alpha”、“q_2”等,特殊符号可以点击界面上的“ Ω... ”按钮键入;
(2)运算符号写法:加为+,减为-,乘为*,除为/,注意次方写成^或**都可以,优先运算用小括号()。可以看出,这和我们平时正常书写公式没啥太大区别。
图:打开符号面板
下面是一组正确的示范:
$\pi_r^{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)
Hollow word = 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)
NS下的利润$\pi$ = 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)
这个工具 yyds = 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)
**对于特别长的公式,尤其括号嵌套特别多时,手写公式很痛苦!好在easyfig给我们提供了工具!**点击界面上的“打开LaTeX转换器”,即可进入该工具。注意:该工具只负责转换"="的右边部分!"="左边需要用户自己起名。
(1)对于Mathtype输入的Word公式,需要选择“通用LaTex”选项,输入LaTex代码,点击“转换”即可。注意:第一次使用,后台会安装插件,安装好后,会提示“安装`antlr4-python3-runtime==4.xx`成功,请重新启动easyfig即可!”,按照要求,重启easyfig即可。
(2)对于Mathematica的结果,右键选择“复制为”,点击“LaTeX”,类似地,将内容粘贴到输入框中,但要选择“Mathematica LaTex”,点击“转换”,复制结果即可。
图:Mathematica LaTex
为了方便大家理解,关于上述功能的视频演示如下(2.0.0版本,新版本操作一样,增加了matlab代码转sympy的功能):【或者点击此处播放】
视频:如何快速输入公式?借助转换工具
3.2 单参数数值分析
单参数数值分析需要在“绘制仿真折线图”界面中进行。输入公式完成后,点击“公式识别”,当下面的运行信息显示“公式识别成功!”时,进行下一步:分析参数选取。具体操作请看我演示视频:【或者点击此处播放】
视频:单参数数值曲线外观设置
文件的保存与打开:easyfig支持将设定好的图像数据保存。点击“保存...”,可以以.py或.txt的格式将你的画图数据保存下来;当以后想修改这个画图时,点击“打开...”,选择你之前保存的.py或.txt文件,即可恢复之前的工作。具体操作请见视频演示:【或者点击此处播放】
视频:保存与打开操作
3.3 双参数分析-最优模式分析
具体请看视频演示:【或者点击此处播放】
视频:双参数分析-最优模式分析
3.4 双参数分析-详细区域分析
请看视频演示:【或者点击此处播放】
视频:双参数分析-详细区域分析
3.5 双参数分析-三维图分析
请看视频演示:【或者点击此处播放】
视频:双参数分析-三维图分析
四、Easyfig高阶用法【针对Python编程同学,作为Python第三方包编程使用】
推荐用Jupyter,可以直接编程使用,能够更细致地设置图片细节。
from easyfig import * # 固定写法
%config InlineBackend.figure_format = 'retina' # 在 Jupyter 中显示高清图片
# 如果想快速上手,推荐使用make_example()函数生成示例代码,直接修改!
make_example("data_lines")
4.1 根据数据绘制曲线【data_lines函数】
# 以方括号(列表、numpy数组均可)形式给出数据,并给这组数据起个名字:
data = {
'景区1旅游人次': [1230, 45789, 2600, 320, 991480, 65780, 89990, 70001, 6423, 415000, 340, 102],
'景区2旅游人次': [800, 34000, 1690, 139, 76788, 453565, 87898, 64302, 3423, 325001, 127, 13],
'景区3旅游人次': [5230, 65789, 7600, 820, 1091480, 85780, 99995, 90001, 9423, 705000, 640, 707],
}
# 给横轴添加刻度标签,注意要和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 = 'data_sigle.tiff'
# 图例的方位,可以选填的内容有'best','northeast','northwest','southwest','southeast','east','west','south','north','center'。
# 默认值为'best',表示自动安排至合适的位置。
location = 'best'
# 图例的列数,默认为1列,即竖着排布。
ncol = 1
fsize = 14 # 图片中字号的大小,默认值为14。
figsize = [7, 5] # 图片的大小,写成`[宽, 高]`的形式。
# 横轴刻度标签旋转角度。用于刻度为年份,横着挤不下的情况,可以设成45度,错开排布。默认不旋转,即0度。
xt_rotation = 45
# 横轴名字标签旋转角度,默认值0,基本不需要动。
xrotation = 0
# 纵轴名字标签旋转角度,默认值90,字是正的。如果y轴的名字较长,不好看,可以设成0,字是竖倒着写的,紧贴y轴。
yrotation = 90
# 一组线的形状,如实线'-',点横线'-.',虚线'--',点线':'。
linestyles = ['-', '-.','--']
linewidth = 1.2 # 线粗。
markers = ['o','s', '*'] # 线上的标记符号,关于标记符号的详细说明 https://matplotlib.org/stable/api/markers_api.html#module-matplotlib.markers
markersize = 3.5 # 标记符号的大小,默认3.5。
# 四条线的颜色
colors = ['blue','red','green']
isgrid = False # 是否要网格。要就填True,不要就是False,默认不要。
# x/y轴刻度值距离横轴的距离
xpad = 3
ypad = 3
# x/y轴名字标签距离横轴刻度的距离。
xlabelpad = 3
ylabelpad = 3
# 自定义坐标轴字体大小
xlabelsize = 39 # 横轴字大小,默认'auto',自动和fsize一样大
ylabelsize = 9 # 纵轴字大小,默认'auto',自动和fsize一样大
legendsize = 17 # 图例字大小,默认'auto',自动和fsize一样大
# 传给data_lines函数 (不要改!)
# Passed to the data_lines function (Don't change!).
plt = data_lines(data, label_x=label_x, x_name=x_name, y_name=y_name, save_dir=save_dir, location=location, ncol=ncol,
fsize=fsize, figsize=figsize, xt_rotation=xt_rotation, xrotation=xrotation, yrotation=yrotation,
linestyles=linestyles, linewidth=linewidth, markers=markers, markersize=markersize, colors=colors,
isgrid=isgrid, xpad=xpad, ypad=ypad, xlabelpad=xlabelpad, ylabelpad=ylabelpad,
xlabelsize=xlabelsize, ylabelsize=ylabelsize, legendsize=legendsize)
plt.title('旅游数据') # 还可以个性化加东西
plt
4.2 数值仿真符号函数的曲线【draw_lines函数】
# 定义符号
# Define symbols
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')
# 四个表达式
# Four expressions
expressions = {
r'$\pi_r^{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),
r'$\pi_r^{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),
r'$\pi_r^{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),
r'$\pi_r^{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),
}
# 参数赋值
# Parameter assignment
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 parameters to be analyzed and their value ranges.
the_var = b
ranges = [0, 0.08, 0.01] # [起始值, 终止值, 间隔]。 [Starting value, ending value, interval].
# xy轴的名字
# The names of the x-axis and y-axis.
x_name = r'(a) Parameter $b$'
y_name = r'$\pi_r$'
# 图片保存路径、文件名
# Picture save path and file name.
save_dir = r'mutiple_line.tiff'
# 图例的方位,可以选填的内容有'best','northeast','northwest','southwest','southeast','east','west','south','north','center'。
# 默认值为'best',表示自动安排至合适的位置。
location = 'best'
# 图例的列数,默认为1列,即竖着排布。
ncol = 1
# 图片中字号的大小
fsize = 14
# 图片的大小,写成`[宽, 高]`的形式。
figsize = [5, 4]
xt_rotation = 0 # 横轴刻度标签旋转角度。用于刻度为年份,横着挤不下的情况,可以设成45度,错开排布。默认不旋转,即0度。
# xrotation/yrotation: x/y轴名字标签旋转角度。
xrotation = 0
yrotation = 90
linestyles = ['-','-.','--', ':'] # 线的风格,实线'-',点横线'-.',虚线'--',点线':'。
linewidth = 1.0 # 线粗。
markers = ['o','s', '*', 'P'] # 线上的标记符号,关于标记符号的详细说明 https://matplotlib.org/stable/api/markers_api.html#module-matplotlib.markers
markersize = 3.5 # 标记符号的大小,默认3.5。
# 四条线的颜色
colors = ['black','blue','red','green']
# 是否要网格。要就填True,不要就是False
isgrid = False
# 分别为x/y轴刻度值距离横轴的距离。
xpad = 3
ypad = 3
# 分别为x/y轴名字标签距离纵轴刻度的距离。
xlabelpad = 13
ylabelpad = 2
# 自定义坐标轴字体大小
xlabelsize = 39 # 横轴字大小,默认'auto',自动和fsize一样大
ylabelsize = 9 # 纵轴字大小,默认'auto',自动和fsize一样大
legendsize = 17 # 图例字大小,默认'auto',自动和fsize一样大
# 传给draw_lines函数 (不要改!)
# Passed to the draw_lines function (Don't change!).
draw_lines(expressions=expressions, assigns=assigns, the_var=the_var, ranges=ranges, x_name=x_name, y_name=y_name,
save_dir=save_dir, location=location, ncol=ncol, fsize=fsize, figsize=figsize, xt_rotation=xt_rotation,
xrotation=xrotation, yrotation=yrotation, linestyles=linestyles, linewidth=linewidth, markers=markers,
markersize=markersize, colors=colors, isgrid=isgrid, xpad=xpad, ypad=ypad, xlabelpad=xlabelpad, ylabelpad=ylabelpad,
xlabelsize=xlabelsize, ylabelsize=ylabelsize, legendsize=legendsize)
4.3 同时分析两个参数,绘制三维曲线【draw_3D函数】
# 定义符号
# Define symbols
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')
# 四个表达式
# Four expressions
expressions = {
r'$\pi_r^{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),
r'$\pi_r^{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),
r'$\pi_r^{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),
r'$\pi_r^{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),
}
# 参数赋值
# Parameter assignment
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 parameters to be analyzed and their value ranges.
the_var_x = alpha
start_end_x = [0.7, 0.8] # [起始值, 终止值]。 [starting value, ending value].
the_var_y = b
start_end_y = [0, 0.08] # [起始值, 终止值]。 [starting value, ending value].
# xy轴的名字
# The names of the x-axis and y-axis.
x_name = r'$\alpha$'
y_name = r'$b$'
z_name = r'$\pi_r$'
# 图片保存路径、文件名
# Picture save path and file name.
save_dir = r'muti_3d.tiff'
# 曲面的透明度。取值范围0到1,浮点数。0表示全透明,1表示完全不透明。
color_alpha = 0.8
# 图例的方位,可以选填的内容有'best','northeast','northwest','southwest','southeast','east','west','south','north','center'。
# 默认值为'best',表示自动安排至合适的位置。
location = 'best'
# 图例的列数,默认为1列,即竖着排布。
ncol = 4
# 图片中字号的大小
fsize = 14
# 图片的大小,写成`[宽, 高]`的形式。默认为`[7, 5]`。
figsize = [7, 5]
# xrotation/yrotation: x/y轴名字标签旋转角度,默认值0,基本不需要动。
xrotation = 0
yrotation = 0
# Z轴名字标签旋转角度,默认值90,字是正的。如果Z轴的名字较长,不好看,可以设成0,字是竖倒着写的,紧贴Z轴
zrotation = 90
# 是否要网格。要就填True,不要就是False
isgrid = True
# 在多面图中用于按顺序制定每个面的颜色(包含标记符号的颜色)。
colors = ['yellow','blue','red','green']
# 曲面上线框的颜色。若为None,则曲面上不画线。当该参数不为None时,参数`linestyles`,`linewidth`和`density`才起作用。
edgecolor = 'black'
linestyles = ['-','-.','--', ':'] # 实线'-',点横线'-.',虚线'--',点线':'。
linewidth = 0.5 # 线粗。
density = 50 # 曲面上画线的密度,也就是曲面横纵方向各画多少根线。默认100。
# 仰角 (elevation)。定义了观察者与 xy 平面之间的夹角,也就是观察者与 xy 平面之间的旋转角度。
elevation = 15
# 方位角 (azimuth)。定义了观察者绕 z 轴旋转的角度。它决定了观察者在 xy 平面上的位置。
azimuth = 45
# 左、下、右、上的图片留白,默认分别为0,0,1,1。不需要动,除非不好看。
left_margin = 0
bottom_margin = 0
right_margin = 1
top_margin = 1
# 分别为/y/z轴刻度值距离横轴的距离。
xpad = 1
ypad = 1
zpad = 5
# 分别为/y/z轴名字标签距离纵轴刻度的距离。
xlabelpad = 2
ylabelpad = 2
zlabelpad = 12
# 自定义坐标轴字体大小
xlabelsize = 39 # 横轴字大小,默认'auto',自动和fsize一样大
ylabelsize = 9 # 纵轴字大小,默认'auto',自动和fsize一样大
zlabelsize = 'auto' # 纵轴字大小,默认'auto',自动和fsize一样大
legendsize = 19 # 图例字大小,默认'auto',自动和fsize一样大
# 传给draw_3D函数 (不要改!)
# Passed to the draw_3D function (Don't change!).
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=color_alpha, location=location, ncol=ncol, fsize=fsize, figsize=figsize,
xrotation=xrotation, yrotation=yrotation, zrotation=zrotation, isgrid=isgrid, colors=colors,
edgecolor=edgecolor, linestyles=linestyles, linewidth=linewidth, density=density, elevation=elevation, azimuth=azimuth,
left_margin=left_margin, bottom_margin=bottom_margin, right_margin=right_margin, top_margin=top_margin,
xpad=xpad, ypad=ypad, zpad=zpad, xlabelpad=xlabelpad, ylabelpad=ylabelpad, zlabelpad=zlabelpad,
xlabelsize=xlabelsize, ylabelsize=ylabelsize, zlabelsize=zlabelsize, legendsize=legendsize)
4.4 基于最大利润的模式比较【draw_max_area函数】
# 定义符号
# Define symbols
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')
# 四个表达式
# Four expressions
expressions = {
r'$\pi_r^{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),
r'$\pi_r^{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),
r'$\pi_r^{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),
r'$\pi_r^{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),
}
# 参数赋值
# Parameter assignment
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 parameters to be analyzed and their value ranges.
the_var_x = alpha
start_end_x = [0.7, 0.8] # [起始值, 终止值]。 [starting value, ending value].
the_var_y = b
start_end_y = [0, 0.08] # [起始值, 终止值]。 [starting value, ending value].
# xy轴的名字
# The names of the x-axis and y-axis.
x_name = '$\\alpha$ \n (b) With blockchain'
y_name = r'$b$'
# 图片保存路径、文件名
# Picture save path and file name.
save_dir = r'max_area.tiff'
# 四个表达式分别达到最大时显示的标签、区域背景颜色和区域图案。
# The labels, regional background colors and regional patterns displayed when the four expressions reach their maxima respectively.
texts = [r'NW', r'BW', r'NS', r'BS']
colors = ['#dae3f3', '#fbe5d6', '#e2f0d9', '#ededed']
patterns = [' ', '+', '\\', '-']
# 其他设置
text_fsize_add = 2 # 区域标签字号增量。 Increment of regional label font size.
figsize=[5, 4] # 图片大小:宽5高4。 icture size: width 5, height 4.
xrotation=0 # x轴标签名旋转角度(0为不旋转)。 Rotation angle of x-axis label name (0 means no rotation).
yrotation=0 # y轴标签名旋转角度(0为不旋转)。 Rotation angle of y-axis label name (0 means no rotation).
linewidths=0.1 # 线粗0.1. Line thickness: 0.1.
# x/y轴名字标签距离横轴刻度的距离
xlabelpad = 3
ylabelpad = 17
# 自定义坐标轴字体大小
xlabelsize = 8 # 横轴字大小,默认'auto',自动和fsize一样大
ylabelsize = 29 # 纵轴字大小,默认'auto',自动和fsize一样大
# 标签背景色和位置偏移自定义设置,默认'auto'自动
pattern_colors = ['#dae3f3', 'white', 'none', 'auto'] # 分别为NW,BW,NS,BS设置标签背景色,'auto'为自动,'none'为透明
pattern_moves = [(+0.005, +0.01), (+0, -0.005), (0, 0), (0, 0)] # 分别为NW,BW,NS,BS设定区域标签较原来的偏移量,(x方向,y方向)
# 传给draw_max_area函数(不要改!)
# Passed to the draw_max_area function (Don't change!).
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_name, y_name=y_name,
fsize=14, texts=texts, text_fsize_add=text_fsize_add,
save_dir=save_dir, figsize=figsize, colors=colors, patterns=patterns,
xrotation=xrotation, yrotation=yrotation, linewidths=linewidths,
xlabelsize=xlabelsize, ylabelsize=ylabelsize, pattern_colors=pattern_colors,
pattern_moves=pattern_moves, xlabelpad=xlabelpad, ylabelpad=ylabelpad)
4.5 不同区域各个函数大小关系呈现【draw_detail_area函数】
# 定义符号
# Define symbols
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')
# 四个表达式
# Four expressions
expressions = {
r'$\pi_r^{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),
r'$\pi_r^{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),
r'$\pi_r^{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),
r'$\pi_r^{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),
}
# 参数赋值
# Parameter assignment
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 parameters to be analyzed and their value ranges.
the_var_x = alpha
start_end_x = [0.7, 0.8] # [起始值, 终止值]。 [starting value, ending value].
the_var_y = b
start_end_y = [0, 0.08] # [起始值, 终止值]。 [starting value, ending value].
# xy轴的名字
# The names of the x-axis and y-axis.
x_name = '$\\alpha$ \n (b) With blockchain'
y_name = r'$b$'
# 图片保存路径、文件名
# Picture save path and file name.
save_dir = r'max_area_detail.tiff'
# 每个关系区域的标签前缀、编号样式、背景颜色和图案。
# The label prefix, numbering style, background color and pattern of each relational area.
prefix=r'Region' # 前缀。可以是"区域"也可以是"Region",默认"Region"。
numbers='roman' # 序号标记风格。有三种可选:"roman", "letter" 和"number",分别表示罗马数字、大写英文字母和阿拉伯数字。Numbering style. There are three options: "roman", "letter", and "number".
colors = ['#dae3f3', '#fbe5d6', '#e2f0d9', '#ededed', 'yellow', '#adb9ca', 'white']
patterns = [' ', '+', '\\', '-', '//', '|', 'o']
# 其他设置
text_fsize_add = -2 # 区域标签字号增量。 Increment of regional label font size.
figsize=[7, 4] # 图片大小:宽5高4。 icture size: width 5, height 4.
xrotation=0 # x轴标签名旋转角度(0为不旋转)。 Rotation angle of x-axis label name (0 means no rotation).
yrotation=0 # y轴标签名旋转角度(0为不旋转)。 Rotation angle of y-axis label name (0 means no rotation).
linewidths=0.1 # 线粗0.1. Line thickness: 0.1.
# x/y轴名字标签距离横轴刻度的距离
xlabelpad = 3
ylabelpad = 17
# 自定义坐标轴字体大小
xlabelsize = 8 # 横轴字大小,默认'auto',自动和fsize一样大
ylabelsize = 29 # 纵轴字大小,默认'auto',自动和fsize一样大
legendsize = 9 # 图例字大小,默认'auto',自动和fsize一样大
# 标签背景色和位置偏移自定义设置,默认'auto'自动
pattern_colors = ['#dae3f3', 'white', 'none', 'auto'] # 分别为NW,BW,NS,BS设置标签背景色,'auto'为自动,'none'为透明
pattern_moves = [(+0.005, +0.01), (+0, +0.005), (0, 0), (0, 0)] # 分别为NW,BW,NS,BS设定区域标签较原来的偏移量,(x方向,y方向)
# 传给draw_detail_area函数(不要改!)
# Passed to the draw_detail_area function (Don't change!).
draw_detail_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_name, y_name=y_name,
fsize=14, text_fsize_add=text_fsize_add,
save_dir=save_dir, figsize=figsize, colors=colors, patterns=patterns,
xrotation=xrotation, yrotation=yrotation, linewidths=linewidths,
prefix=prefix, numbers=numbers, xlabelsize=xlabelsize, ylabelsize=ylabelsize, legendsize=legendsize,
pattern_colors=pattern_colors, pattern_moves=pattern_moves, xlabelpad=xlabelpad, ylabelpad=ylabelpad)
附录
A. 附录A: LaTeX的使用口诀
下标下划线,上标冒尖尖。
希腊字母前,加上反斜线。
上下标字母多,花括号不能少。
适用范围:“表达式输入”的等号左侧(同时也是图例)、“x轴名称”、“y轴名称”、“z轴名称”、最大值区域标注。用“$ $”括起来的地方,系统会识别为LaTeX,如图:
下标下划线(_),上标冒尖尖(^)。 【例如:$p_a$ 对应 $p_a$ ,$a^b$ 对应 $a^b$】
希腊字母前(如alpha),加上反斜线(\)。 【例如:$\alpha_1$ 对应 $\alpha_1$,$\gamma$ 对应 $\gamma$】
上下标字母多,花括号不能少。【例如:$\alpha_{ab}$ 对应 $\alpha_{ab}$, $A_{12}^{cd}$ 对应 $A_{12}^{cd}$】
除了LaTeX需要注意外,还需要注意的是,如果坐标轴标注里想换行,在换行处直接打\n。例如:
$b$ \n (a) Parameter $b$
对应效果为:
B. 附录B:颜色的表示
针对需要进行颜色设置的地方,easyfig提供了颜色筛选器:
当然,也可以输入特定颜色对应的单词去设置颜色,颜色及名称如下:
甚至,你还可以利用截图工具,例如Snipaste等,获取某个颜色的16进制值,如#e9ac7d ,直接粘贴到颜色名称下拉列表框内,即可为所欲为地设置颜色啦~
C. 附录C:线形的表示
easyfig支持多种线形(线型),不局限于系统给出的下拉列表那些,用于可以自己输入。
以下是一些常见的线形及其对应的表示:
- '-'或'solid':实线
- '--'或'dashed':虚线
- ':'或'dotted':点线
- '-.'或'dashdot':点划线
- 'None':无连接线,只显示标记
- (0, (5, 10)):短虚线
- (0, (10, 10)):长虚线
- (0, (5, 10, 15, 10)):长短虚线
- (0, (5, 10, 1, 10)):点划线
- (0, (1, 1)):密集虚线
- (0, (20, 10)):稀疏虚线
- (5, (10, 10)):偏移虚线
D. 附录D:区域条纹的表示
对于"绘制模式比较图"和"绘制关系区域图"功能,easyfig支持多种区域条纹形状。本系统支持的区域条纹及其效果如下:
包括:
'xx', '--', '..', '||', '..', 'oo', '++', '**', '\\\\\\\\', '////', '-', 'x', '|', '.', 'o', '+', '*', '\\\\', '//', '---', 'xxx', '|||', '...', 'ooo', '+++', '***', '\\\\\\\\\\\\', '//////'。
图案可重复使用以增加密度,例如**、***、*****。
E. 附录E:标记点形状
对于"绘制仿真折线图"功能,easyfig支持多种标记点形状,例如,无标记点为None 。本系统支持的标记点及其效果如下:
F. 附录F:3D图的视角
- 仰角 (elevation):定义了观察者与 xy 平面之间的夹角,也就是观察者与 xy 平面之间的旋转角度。当elevation为正值时,观察者向上倾斜,负值则表示向下倾斜。默认15度。可根据美观与否微调。
- 方位角 (azimuth):定义了观察者绕 z 轴旋转的角度。它决定了观察者在 xy 平面上的位置。azim 的角度范围是 −180 到 180 度,其中正值表示逆时针旋转,负值表示顺时针。默认45度。可根据美观与否微调。
更新日志
新版本2.5.0更新日志:
(1)修复了Mathematica分式/根式嵌套转换出错的Bug;
(2)增加Matlab代码转Sympy代码的功能;
(3)更改要分析的变量时,其他已赋值好的参数取值不变;
(4)其他体验上的优化(如增大默认字号、默认保存双击即打开的文件)。
新版本3.7.0更新日志:
(1)data_lines函数可在一张图中绘制长度不同的曲线。
Metadata
Release files for easyfig 3.7.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| easyfig-3.7.0.tar.gz | 78.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| easyfig-3.7.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 136.5 kB
Release files / easyfig-3.7.0.tar.gz
| Download URL | easyfig-3.7.0.tar.gz |
|---|---|
| Size | 78.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
efad272e38bfa3707dd81af6d74cff1103ad046931484dbc3ea1bbbd9805a05e
|
|
BLAKE2b-256 checksum How to use checksums |
a0dc49401b125b4464d223c6d0799763892e548614f34badccce08887f03cf86
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.4
|
Release files / easyfig-3.7.0-py3-none-any.whl
| Download URL | easyfig-3.7.0-py3-none-any.whl |
|---|---|
| Size | 57.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9475f44f3aab1d299dd2bea4fa2eeb31498f49e2b0d900a413172b5a14928c94
|
|
BLAKE2b-256 checksum How to use checksums |
5977844dd255ddd3652aad3823a2a61101e0ec0fb75e3d1e7dcaa1bc87e6d572
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.4
|