seaborn.objects.Plot.scale#

Plot.scale(**scales)#

指定从数据单位到视觉属性的映射。

关键字对应于绘图中定义的变量,包括坐标变量(xy)和语义变量(colorpointsize 等)。

接受许多“神奇”参数,包括
  • 变换的名称(例如,"log""sqrt"

  • 调色板的名称(例如,"viridis""muted"

  • 定义输出范围的值元组(例如 (1, 5)

  • 字典,暗示 Nominal 尺度(例如 {"a": .2, "b": .5}

  • 值列表,暗示 Nominal 尺度(例如 ["b", "r"]

为了更显式的控制,传递一个尺度规格对象,例如 ContinuousNominal。或者传递 None 来使用“恒等式”尺度,它将数据值视为文字编码视觉属性。

示例

传递函数名称,例如 "log""symlog" 将设置尺度的变换

p1 = so.Plot(diamonds, x="carat", y="price")
p1.add(so.Dots()).scale(y="log")
../_images/objects.Plot.scale_1_0.png

字符串参数也可以指定定义尺度输出值(或“范围”)的调色板的名称

p1.add(so.Dots(), color="clarity").scale(color="crest")
../_images/objects.Plot.scale_3_0.png

尺度的范围可以作为最小值/最大值元组来指定

p1.add(so.Dots(), pointsize="carat").scale(pointsize=(2, 10))
../_images/objects.Plot.scale_5_0.png

元组格式也可以用于颜色尺度

p1.add(so.Dots(), color="carat").scale(color=(".4", "#68d"))
../_images/objects.Plot.scale_7_0.png

为了更细粒度的控制,传递尺度对象,例如 Continuous,它允许您指定输入域(norm)、输出范围(values)和非线性变换(trans

(
    p1.add(so.Dots(), color="carat")
    .scale(color=so.Continuous((".4", "#68d"), norm=(1, 3), trans="sqrt"))
)
../_images/objects.Plot.scale_9_0.png

尺度对象还提供了一个界面来配置尺度刻度的位置(包括图例中)和刻度标签的格式

(
    p1.add(so.Dots(), color="price")
    .scale(
        x=so.Continuous(trans="sqrt").tick(every=.5),
        y=so.Continuous().label(like="${x:g}"),
        color=so.Continuous("ch:.2").tick(upto=4).label(unit=""),
    )
    .label(y="")
)
../_images/objects.Plot.scale_11_0.png

如果尺度包含非线性变换,则它将在任何统计变换之前应用

(
    p1.add(so.Dots(color=".7"))
    .add(so.Line(), so.PolyFit(order=2))
    .scale(y="log")
    .limit(y=(250, 25000))
)
../_images/objects.Plot.scale_13_0.png

尺度对于何时应将数值数据视为类别也很重要。请考虑以下直方图

p2 = so.Plot(mpg, "cylinders").add(so.Bar(), so.Hist())
p2
../_images/objects.Plot.scale_15_0.png

默认情况下,绘图会给cylinders 一个连续的尺度,因为它是一个浮点数向量。但是,分配一个 Nominal 尺度会导致直方图正确地对观察结果进行分箱

p2.scale(x=so.Nominal())
../_images/objects.Plot.scale_17_0.png

语义映射的默认行为也取决于输入数据类型,并且可以通过尺度进行修改。请考虑应用于此绘图中颜色的顺序映射

p3 = (
    so.Plot(mpg, "weight", "acceleration", color="cylinders")
    .add(so.Dot(), marker="origin")
)
p3
../_images/objects.Plot.scale_19_0.png

传递一个定性调色板的名称将选择一个 Nominal 尺度

p3.scale(color="deep")
../_images/objects.Plot.scale_21_0.png

当输出值作为列表或字典给出时,也会暗示一个 Nominal 尺度

p3.scale(
    color=["#49b", "#a6a", "#5b8"],
    marker={"japan": ".", "europe": "+", "usa": "*"},
)
../_images/objects.Plot.scale_23_0.png

直接传递一个 Nominal 对象来控制类别映射的顺序

p3.scale(
    color=so.Nominal(["#008fd5", "#fc4f30", "#e5ae38"]),
    marker=so.Nominal(order=["japan", "europe", "usa"])
)
../_images/objects.Plot.scale_25_0.png