Matplotlib - 坐标变换



一般来说,变换是将某事物从一种形式转换为另一种形式的方法。这就像接收一个输入并将其转换为不同的输出。变换被广泛应用于数学、物理和计算机科学等各个领域。

例如,在数学中,变换可以是一种将一组数字或函数转换为不同表示的数学运算。例如,傅里叶变换将时域函数(如声波)转换为其频率分量。

Transforms

Matplotlib中的变换

在 Matplotlib 中,变换是指将数据坐标转换为像素坐标的过程,它允许精确地将图形元素(如点、线和文本)放置在绘图中。

您可以在 matplotlib 中使用各种类型的变换,例如线性变换、对数变换等等。为了处理这些变换,Matplotlib 提供了“transform”参数。

“transform”参数可以取各种值,例如“matplotlib.transforms.Transform”类的实例或表示常见变换的字符串,例如数据坐标的'ax.transData'或坐标轴坐标的'ax.transAxes'。通过使用transform参数,您可以自定义坐标系并应用不同的变换来增强 Matplotlib 绘图上数据可视化的效果。

数据到坐标轴变换

在 Matplotlib 中,数据到坐标轴变换是指将您的实际数据点转换为绘图坐标轴内坐标的过程。当您绘制数据时,您使用特定的“x”和“y”值。变换确保这些数据点在绘图的坐标轴内被正确定位,同时考虑到“x”和“y”坐标轴的缩放和限制。

示例

在下面的示例中,我们使用数据坐标 (x, y) 创建一个简单的线图。然后,我们使用 ax.text() 函数向绘图添加文本,在数据坐标中指定位置 (2, 25)。“transform=ax.transData”参数确保文本使用数据坐标定位 -

import matplotlib.pyplot as plt
# Data
x = [1, 2, 3, 4]
y = [10, 20, 25, 30]

# Creating a plot
fig, ax = plt.subplots()
ax.plot(x, y, marker='o', linestyle='-', label='Data points')
ax.legend()

# Transforming data coordinates to axes coordinates
ax.text(2, 25,'Text in Data Coordinates' , transform=ax.transData)

# Setting plot title and labels
ax.set_title('Data to Axes Transform')
ax.set_xlabel('X-axis')
ax.set_ylabel('Y-axis')

plt.show()
输出

以下是上述代码的输出 -

Data to Axes Transform

坐标轴到数据变换

Matplotlib 中的坐标轴到数据变换是“数据到坐标轴变换”的反向过程。“数据到坐标轴变换”将您的实际数据点转换为绘图坐标轴内的坐标,而“坐标轴到数据变换”则执行相反的操作。它采用根据绘图坐标轴指定的坐标,并将其转换为相应的数据值。

示例

在这里,我们创建一个绘图,并将“x”和“y”坐标轴的坐标轴限制设置为“0”到“1”。我们使用 ax.text() 函数向绘图添加文本,在坐标轴坐标中指定位置“(0.5, 0.5)”。“transform=ax.transAxes”参数确保文本位置被解释为相对于坐标轴而不是数据 -

import matplotlib.pyplot as plt

# Creating a plot with normalized axes
fig, ax = plt.subplots()
ax.set_xlim(0, 1)
ax.set_ylim(0, 1)

# Transforming axes coordinates to data coordinates
ax.text(0.5, 0.5, 'Text in Axes Coordinates', transform=ax.transAxes, ha='center', va='center')

# Setting plot title and labels
ax.set_title('Axes to Data Transform Example')
ax.set_xlabel('X-axis (normalized)')
ax.set_ylabel('Y-axis (normalized)')

plt.show()
输出

执行上述代码后,我们将得到以下输出 -

Axes to Data Transform

混合变换

在 Matplotlib 中,混合变换是在绘图上放置元素时组合或混合不同坐标系的一种方法。它允许您创建一个包含数据坐标和坐标轴坐标方面的自定义变换。

示例

在下面的示例中,我们创建一个绘图并使用 blended_transform_factory() 函数创建一个混合变换。“trans”对象是数据坐标和坐标轴坐标的混合。然后,ax.text() 函数使用此混合变换在 (0.8, 0.2) 处定位文本,有效地组合了数据和坐标轴坐标 -

import matplotlib.pyplot as plt
from matplotlib.transforms import blended_transform_factory

# Creating a plot
fig, ax = plt.subplots()

# Creating a blended transformation
trans = blended_transform_factory(ax.transData, ax.transAxes)

# Adding text using the blended transformation
ax.text(0.8, 0.2, 'Blended Transform', transform=trans, ha='center', va='center')

# Setting plot title and labels
ax.set_title('Blended Transform')
ax.set_xlabel('X-axis')
ax.set_ylabel('Y-axis')

plt.show()
输出

执行上述代码后,我们将得到以下输出 -

Blended Transform

偏移变换

在 Matplotlib 中,偏移变换是在绘图上添加精确偏移到元素位置的一种方法。它涉及通过指定量移动或转换元素的坐标。当您想要微调文本、标记或其他图形元素的位置时,此类型的变换非常有用。

例如,如果您有一个位于 (2, 10) 的数据点,并且您想在此点的右侧和上方稍微显示一个标签,则可以使用偏移变换将特定偏移应用于原始坐标。这允许您控制元素相对于其在数据中的原始位置的精确位置。

示例

现在,我们创建一个绘图,并使用“ScaledTranslation”类创建一个偏移变换。“trans”对象是原始数据变换 (ax.transData) 和数据坐标中 (0.1, 0.2) 的缩放平移的组合。然后,ax.text() 函数使用此变换后的坐标在 (2, 25) 处定位文本,并具有指定的偏移量 -

import matplotlib.pyplot as plt
from matplotlib.transforms import ScaledTranslation

# Creating a plot
fig, ax = plt.subplots()

# Creating an offset transformation
trans = ax.transData + ScaledTranslation(0.1, 0.2, ax.transData)

# Adding text with the offset transformation
ax.text(0.4, 0.2, 'Text with Offset', transform=trans)

# Setting plot title and labels
ax.set_title('Offset Transform Example')
ax.set_xlabel('X-axis')
ax.set_ylabel('Y-axis')

plt.show()
输出

执行上述代码后,我们将得到以下输出 -

Offset Transform
广告