创建缩放和转换的开发人员指南¶
Matplotlib支持添加自定义过程,以便在显示数据之前对其进行转换。
两种转换之间有一个重要的区别。在单一维度上工作的可分离转换称为“尺度”,而一次处理两个或多个维度数据的不可分离转换称为“投影”。
从用户的角度来看,可以使用 Axes.set_xscale
和 Axes.set_yscale
. 可以使用 投影 创建轴的函数的关键字参数,例如 pyplot.subplot
或 pyplot.axes
,例如:
plt.subplot(projection="custom")
本文档面向需要为Matplotlib创建新比例和投影的开发人员和高级用户。缩放和投影所需的代码可以包含在任何地方:直接在绘图脚本中、在第三方代码中或在Matplotlib源代码树中。
创建新比例¶
添加新的比例包括定义 matplotlib.scale.ScaleBase
,包括以下元素:
- 从数据坐标到显示坐标的转换。
- 这个变换的倒数。例如,它用于将鼠标位置从屏幕空间转换回数据空间。
- 将轴的范围限制为可接受值的函数。 (
limit_range_for_scale()
)例如,对数刻度将阻止范围包括小于或等于零的值。 - 定位器(主要和次要),用于确定在绘图中放置刻度的位置,以及(可选)如何将绘图的限制调整为某些“良好”值。不像
limit_range_for_scale()
,这始终是强制的,这里的范围设置仅在自动设置绘图范围时使用。 - 指定刻度线标签绘制方式的格式设置工具(主要和次要)。
一旦定义了类,它就必须注册到Matplotlib,以便用户选择它。
一个完整的、有大量注释的例子出现在 自定义比例尺 . 还有一些课程在 matplotlib.scale
可以作为起点。
创建新投影¶
添加一个新的投影包括定义一个投影轴,该投影轴子类 matplotlib.axes.Axes
包括以下要素:
- 从数据坐标到显示坐标的转换。
- 这个变换的倒数。例如,它用于将鼠标位置从屏幕空间转换回数据空间。
- 网格线、记号和记号标签的转换。自定义投影通常需要将这些元素放置在特殊位置,Matplotlib有一个工具可以帮助您这样做。
- 设置默认值(覆盖
cla()
,因为直线轴的默认值可能不合适。 - 定义轴的形状,例如椭圆轴,用于绘制绘图背景和剪切任何数据元素。
- 为投影定义自定义定位器和格式化程序。例如,在地理投影中,以度数显示网格可能更方便,即使数据以弧度显示。
- 设置交互式平移和缩放。这是留给读者的一个“高级”功能,但在
matplotlib.projections.polar
. - 为了附加的便利或功能而使用的任何附加方法。
定义投影轴后,可以通过以下两种方式之一使用投影轴:
通过定义类属性
name
,投影轴可以注册matplotlib.projections.register_projection()
然后简单地用名称调用:plt.axes(projection='my_proj_name')
对于更复杂、可参数化的投影,可以定义一个通用的“投影”对象,其中包括该方法
_as_mpl_axes
._as_mpl_axes
不应接受任何参数,并返回投影的axes子类和要传递给子类的其他参数的字典__init__
方法。随后,参数化投影可初始化为:plt.axes(projection=MyProjection(param1=param1_value))
其中myProjection是实现
_as_mpl_axes
方法。
一个完整的、有大量注释的例子出现在 自定义投影 . 中的极坐标图功能 matplotlib.projections.polar
可能也很有趣。