跳转至

图形

本手册的每张图都是 MarketFigure,或由 ppf_canvas() 等函数创建的 mosaickit 画布。两者的绘图区为正方形,坐标轴带箭头、无刻度与格线;曲线名称标在末端,面积名称写在区块内,数值标在坐标轴上,文字不遮住线、点、区块或其他文字。

MarketFigure

MarketFigure

颜色与线宽(详见配色与主题)。

PlotTheme.from_palette(palette) 的简写;与 theme 同时给定时以 theme 为准。

依图层 id 覆盖内建标签(详见标签与图层)。

依图层 id 显示或隐藏图层(详见标签与图层)。

mosaickit 画布上的市场图,坐标轴由 0 延伸到 x_max 与 y_max。坐标轴名称除非是文字,否则以 LaTeX 数学排版;title 为空字符串时不画标题。

MarketFigure.add_curves(
    demand,
    supply,
    q_max,
    demand_label="$D$",
    supply_label="$S$"
)
MarketFigure.add_equilibrium(
    result,
    label="$e^*$",
    color=None
)

由 \(Q = 0\) 到 q_max 画出需求与供给并在末端命名;以实心点与标签标出均衡。

各主题另有专属方法,说明见对应章节(参见MarketFigure 的主题方法)。

MarketFigure.finalize(legend=False)
MarketFigure.save(path, dpi=150)

finalize() 隐藏会把福利区块切成两半的辅助线(数值仍标在坐标轴上),只有在 legend=True 时才加入图例。save() 依扩展名写出 PNG、SVG 或 PDF,并创建不存在的目录。close() 不做任何事,仅为兼容而保留。

MarketFigure.add_layer(layer)
MarketFigure.add_layers(layers)

加入任意 mosaickit 图层,用于主题方法未提供的注记。同一数值的坐标轴标记会取代先前的标记。完成的场景可由 fig.scene 获得。

MarketFigure.add_metrics(
    values,
    *,
    title=None,
    location="upper right"
)

以名称与数值组成的文字框,供笔记本与调试使用。教学用图不放此框,数值应写在正文中。

标签与图层

图中的每条线、每个点、每个区块与每段文字都是一个图层,各有固定的 id,例如 market.demand、market.demand.label 或 market.welfare.dwl。id 依图形结构命名:坐标轴为 axes.*,各元素为 market.<部分>,命名该元素的文字再加上 .label 后缀。fig.layer_ids 列出所有图层;fig.label_ids 列出可设置的文字(标签、坐标轴标记与括号)。

Label(
    text=None,
    visible=None,
    offset=None
)

覆盖一个内建标签。值为 None 的字段保留软件包的默认值。指定 offset(单位为点)时,标签不再自动放置,改为精确移动该距离。

MarketFigure.configure_label(
    layer id,
    label=None,
    *,
    text=None,
    visible=None,
    offset=None
)
MarketFigure.configure_layer(
    layer id,
    *,
    visible
)

改名、隐藏或移动一个标签(id 可省略结尾的 .label),或显示、隐藏任一图层。hide(*ids) 与 show(*ids) 一次切换多个图层。每个方法都返回图形本身。

同样的覆盖也可在创建图形时以 labels= 与 visibility= 对应表传入,之后加入的图层也会套用。加总图与各画布函数(ppf_canvas()、public_good_canvas() 等)接受同样的两个参数。

参见改名的曲线与均衡点。:

from principle_viz import Label, MarketFigure

fig = MarketFigure(
    x_max=12,
    y_max=12,
    labels={
        "market.demand.label": Label(text="Demand"),
        "market.supply.label": Label(text="Supply"),
    },
)
fig.add_curves(demand, supply, q_max=10)
fig.add_equilibrium(eq)
fig.configure_label("market.equilibrium", text="$E$")
fig.hide("axes.origin.label")
fig.finalize()

改名的曲线与均衡点。

配色与主题

ColorModel 为每个经济角色指定颜色;PlotTheme 再加上线宽与坐标轴选项,并将两者编译为 mosaickit 主题。内建的四种配色如内建配色。

ColorModel(
    name,
    axis_color,
    label_color,
    demand_color,
    supply_color,
    ...
)

具名的颜色角色:axis_color、label_color、demand_color、supply_color、baseline_color、shifted_color、tax_color、control_color、cs_color、ps_color、tax_revenue_color、dwl_color 与 arrow_color。每个值可为 "#hex" 或 "blue" 等 mosaickit 调色板名称。

mosaickit 色相:需求蓝、供给红、无谓损失青;剩余沿用曲线色相,透明度 15%

色盲友善的质性配色

Nord 配色

黑、白与灰阶,供印刷使用

list_color_models() 返回所有名称,get_color_model(name) 返回对应的配色;四种配色也以 DEFAULT_COLOR_MODEL、COLORBLIND_COLOR_MODEL、NORD_COLOR_MODEL 与 MONOCHROME_COLOR_MODEL 导出。

PlotTheme(
    color_model=...,
    demand_linewidth=3.5,
    supply_linewidth=3.5,
    ...
)
PlotTheme.from_palette(name, **options)

配色加上线宽(demand_linewidth、supply_linewidth、shifted_linewidth、tax_linewidth、arrow_linewidth、dashed_linewidth)、equilibrium_marker_size,以及开关 show_grid、show_ticks、show_axis_arrows 与 show_origin_label。from_palette() 以内建配色为起点,并可设置上述任一字段。

以 palette 参数选用配色(参见monochrome 配色。):

fig = MarketFigure(x_max=12, y_max=12, palette="monochrome")

monochrome 配色。

画布

Canvas

mosaickit 的 Canvas,并具备与 MarketFigure 相同的 labels=、visibility=、configure_label()、configure_layer()、hide()、show()、layer_ids 与 label_ids。生产可能性曲线、公共物品与总收益各章的画布函数都返回此类别;以 save() 保存,或以 mosaickit.CanvasGrid 组合多张画布。

评论