seaborn.objects.Plot.scale#
- Plot.scale(**scales)#
指定从数据单位到视觉属性的映射。
关键字对应于绘图中定义的变量,包括坐标变量(
x
,y
)和语义变量(color
,pointsize
等)。- 接受许多“神奇”参数,包括
为了更显式的控制,传递一个尺度规格对象,例如
Continuous
或Nominal
。或者传递None
来使用“恒等式”尺度,它将数据值视为文字编码视觉属性。示例
传递函数名称,例如
"log"
或"symlog"
将设置尺度的变换p1 = so.Plot(diamonds, x="carat", y="price") p1.add(so.Dots()).scale(y="log")
字符串参数也可以指定定义尺度输出值(或“范围”)的调色板的名称
p1.add(so.Dots(), color="clarity").scale(color="crest")
尺度的范围可以作为最小值/最大值元组来指定
p1.add(so.Dots(), pointsize="carat").scale(pointsize=(2, 10))
元组格式也可以用于颜色尺度
p1.add(so.Dots(), color="carat").scale(color=(".4", "#68d"))
为了更细粒度的控制,传递尺度对象,例如
Continuous
,它允许您指定输入域(norm
)、输出范围(values
)和非线性变换(trans
)( p1.add(so.Dots(), color="carat") .scale(color=so.Continuous((".4", "#68d"), norm=(1, 3), trans="sqrt")) )
尺度对象还提供了一个界面来配置尺度刻度的位置(包括图例中)和刻度标签的格式
( 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="") )
如果尺度包含非线性变换,则它将在任何统计变换之前应用
( p1.add(so.Dots(color=".7")) .add(so.Line(), so.PolyFit(order=2)) .scale(y="log") .limit(y=(250, 25000)) )
尺度对于何时应将数值数据视为类别也很重要。请考虑以下直方图
p2 = so.Plot(mpg, "cylinders").add(so.Bar(), so.Hist()) p2
默认情况下,绘图会给
cylinders
一个连续的尺度,因为它是一个浮点数向量。但是,分配一个Nominal
尺度会导致直方图正确地对观察结果进行分箱p2.scale(x=so.Nominal())
语义映射的默认行为也取决于输入数据类型,并且可以通过尺度进行修改。请考虑应用于此绘图中颜色的顺序映射
p3 = ( so.Plot(mpg, "weight", "acceleration", color="cylinders") .add(so.Dot(), marker="origin") ) p3
传递一个定性调色板的名称将选择一个
Nominal
尺度p3.scale(color="deep")
当输出值作为列表或字典给出时,也会暗示一个
Nominal
尺度p3.scale( color=["#49b", "#a6a", "#5b8"], marker={"japan": ".", "europe": "+", "usa": "*"}, )
直接传递一个
Nominal
对象来控制类别映射的顺序p3.scale( color=so.Nominal(["#008fd5", "#fc4f30", "#e5ae38"]), marker=so.Nominal(order=["japan", "europe", "usa"]) )