Matplotlib - 带单位的椭圆



椭圆是一种几何形状,看起来像一个拉长的圆形。它由两个关键属性定义:长轴(最长直径)和短轴(最短直径)。这些轴在椭圆的中心相交,椭圆的形状由这些轴的长度决定。长轴中心到边缘的距离和短轴中心到边缘的距离都很重要。

从单位的角度来看,你会使用某种单位来测量这些距离,例如英寸、厘米或你选择的任何其他测量单位。因此,当我们说带单位的椭圆时,我们的意思是我们使用具体的测量值(单位)来描述椭圆的大小,同时考虑长轴和短轴的长度。

Ellipse with Units

Matplotlib 中带单位的椭圆

我们可以使用 "matplotlib.patches" 模块中的 "Ellipse" 类在 Matplotlib 中创建带单位的椭圆。"Ellipse" 类允许你定义椭圆的中心、宽度和高度(长轴和短轴)、旋转角度以及其他属性,例如其旋转角度。

轴的测量单位取决于你使用的坐标系。例如,如果你使用英寸单位的绘图,则长轴和短轴的长度将以英寸为单位。

数据坐标系中固定大小的椭圆

在 Matplotlib 中,在数据坐标系中创建固定大小的椭圆涉及在绘图上绘制一个特定大小和位置由数据坐标确定的椭圆。这意味着椭圆的尺寸以与你的实际数据相同的单位指定。

例如,如果你有一个包含 x 和 y 值的数据集,你可以绘制一个椭圆,其中心位于特定的 (x, y) 点,并且椭圆的宽度和高度以数据坐标定义。

示例

我们正在绘制一个简单的椭圆,其固定大小以数据坐标指定。椭圆的中心位于绘图上的 (3, 5) 位置,宽度设置为米为单位的“4”个单位,高度设置为“2”个单位。

import matplotlib.pyplot as plt
from matplotlib.patches import Ellipse

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

# Ellipse in data coordinates (units: meters)
ellipse = Ellipse((3, 5), width=4, height=2, edgecolor='b', facecolor='none')
ax.add_patch(ellipse)

# Setting plot title and labels
ax.set_title('Fixed Size Ellipse in Data Coordinates')
ax.set_xlabel('X-axis (meters)')
ax.set_ylabel('Y-axis (meters)')

# Setting aspect ratio to 'equal'
ax.set_aspect('equal')

# Adjusting axis limits 
ax.set_xlim(0, 6)
ax.set_ylim(3, 7)

# Displaying dimensions 
plt.text(3, 5, f'Width: 4 meters\nHeight: 2 meters', ha='center', va='center', color='red', fontsize=10)
plt.show()

输出

以下是上述代码的输出:

Fixed Size Ellipse in Data Coordinates

坐标轴坐标系中可变大小的椭圆

在 Matplotlib 中创建在坐标轴坐标系中具有可变大小的椭圆涉及绘制一个绘图上的椭圆,其中尺寸以坐标轴而不是实际数据来指定。换句话说,椭圆的宽度和高度分别作为 x 轴和 y 轴总长度的百分比给出。

例如,如果你想可视化一个始终覆盖 x 轴的 60% 和 y 轴的 30% 的椭圆,而不管具体数据值如何,你可以使用坐标轴坐标。当你想让椭圆的大小相对于绘图的整体尺寸时,这尤其有用。

示例

在这里,我们正在绘制一个以坐标轴坐标指定可变大小的椭圆。椭圆的中心位于 (0.5, 0.5),对应于绘图的中心。宽度和高度分别设置为相应轴长度的 60% 和 30%,允许椭圆随着坐标轴的变化而缩放。

import matplotlib.pyplot as plt
from matplotlib.patches import Ellipse

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

# Ellipse in axes coordinates
ellipse = Ellipse((0.5, 0.5), width=0.6, height=0.3, edgecolor='r', facecolor='none', transform=ax.transAxes)
ax.add_patch(ellipse)

# Setting plot title and labels
ax.set_title('Ellipse with Variable Size in Axes Coordinates')
ax.set_xlabel('X-axis (normalized)')
ax.set_ylabel('Y-axis (normalized)')

# Displaying dimensions in the output
plt.text(0.5, 0.5, f'Width: 0.6 (normalized)\nHeight: 0.3 (normalized)', ha='center', va='center', color='blue', fontsize=10, transform=ax.transAxes)
plt.show()

输出

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

Variable Size Axes Coordinates Ellipse

以图形原点为中心的椭圆

在 Matplotlib 中创建以图形原点为中心的椭圆涉及在绘图上绘制一个椭圆,其中心位于整个图形的原点。原点是图形坐标系中的 (0, 0) 点。在这种情况下,椭圆的宽度和高度以图形的单位指定,椭圆的中心正好位于原点。

这演示了如何相对于整个图形而不是单个坐标轴来定位椭圆。

示例

在下面的示例中,我们正在创建一个以图形原点 (0, 0) 为中心的椭圆。宽度设置为 4 个单位,高度设置为 2 个单位。

import matplotlib.pyplot as plt
from matplotlib.patches import Ellipse
import numpy as np

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

# Ellipse centered at figure origin
ellipse = Ellipse((0, 0), width=4, height=2, edgecolor='g', facecolor='none', transform=ax.transData)
ax.add_patch(ellipse)

# Marking the center with a marker
center_x, center_y = 0, 0
ax.plot(center_x, center_y, marker='o', markersize=8, color='red', label='Center')

# Dotted line to represent the center
ax.plot([center_x, center_x], [center_y, center_y], 'r--')

# Horizontal and vertical lines passing through the center
ax.axhline(center_y, color='blue', linestyle='--', label='Horizontal Line')
ax.axvline(center_x, color='purple', linestyle='--', label='Vertical Line')

# Setting plot title and labels
ax.set_title('Ellipse Centered at Figure Origin')
ax.set_xlabel('X-axis (units)')
ax.set_ylabel('Y-axis (units)')

# Adjusting axis limits to make the ellipse and lines visible
ax.set_xlim(-2, 2)
ax.set_ylim(-1, 1)

# Adding legend
ax.legend()
plt.show()

输出

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

Ellipse Centered at Figure Origin

带自定义角度的旋转椭圆

在 Matplotlib 中创建带自定义角度的旋转椭圆涉及在绘图上绘制一个椭圆并指定一个自定义角度来旋转它。旋转角度决定了椭圆在绘图中的倾斜或旋转方式。当你想突出显示特定方向的特征时,这很有用。

示例

现在,我们正在创建一个旋转角度为“45”度的旋转椭圆,从而得到一个倾斜的椭圆。椭圆的中心位于 (2, 3),宽度和高度以数据坐标指定。

import matplotlib.pyplot as plt
from matplotlib.patches import Ellipse

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

# Rotated ellipse with custom angle
ellipse = Ellipse((2, 3), width=3, height=1, angle=45, edgecolor='purple', facecolor='none', transform=ax.transData)
ax.add_patch(ellipse)

# Setting plot title and labels
ax.set_title('Rotated Ellipse with Custom Angle')
ax.set_xlabel('X-axis (units)')
ax.set_ylabel('Y-axis (units)')

# Setting aspect ratio to 'equal'
ax.set_aspect('equal')

# Adjusting axis limits 
ax.set_xlim(0, 4)
ax.set_ylim(2, 5)

# Adding grid for better visualization
ax.grid(True, linestyle='--', alpha=0.7)
plt.show()

输出

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

Rotated Ellipse
广告