Matplotlib - 基本单位



什么是基本单位?

在 Matplotlib 中,基本单位指的是用于定义和测量绘图各个方面(例如长度、宽度、位置和坐标)的基本元素。了解这些单位对于准确地在绘图中放置元素和控制其整体布局至关重要。

Matplotlib 中常见的基本单位

以下是 Matplotlib 库中常见的可用基本单位。

磅 (pt)

在 Matplotlib 中,**磅**通常指的是用于指定绘图中各种视觉属性(例如线宽、标记大小和文本大小)的度量单位。磅 (pt) 是排版和图形学中的标准单位,经常因其与设备无关的大小表示而被使用。

磅在 Matplotlib 中的用法

**线宽** - Matplotlib 函数(例如 **plt.plot()**)中的 **linewidth** 参数允许我们以磅为单位指定线的宽度。

**文本大小** - Matplotlib 函数 **plt.xlabel()、plt.ylabel()、plt.title()** 中的 **fontsize** 参数允许设置文本大小(以磅为单位)。

**标记大小** - plot 函数(例如 plt.plot())中的 **markersize** 参数以磅为单位定义标记的大小。

**图形大小** - 使用 **plt.figure(figsize=(width, height))** 指定图形大小时,尺寸以英寸为单位。但是,默认大小在不同系统上可能有所不同,例如 **1** 英寸并不总是等于 **72** 磅,但这是一种典型的约定。

磅与其他单位的转换

Matplotlib 在内部使用磅,但在设置图形大小或尺寸时,通常使用英寸。作为参考,**1** 英寸大约等于 **72** 磅。

  • 1 英寸 = 72 磅
  • 1 磅 ≈ 0.01389 英寸

理解和利用磅作为 Matplotlib 中的度量单位,可以精确控制绘图中元素的视觉属性,确保所需的显示效果和可读性。

示例

在这个例子中,我们为线图设置了以磅为单位的线宽。

import matplotlib.pyplot as plt
plt.figure(figsize=(6, 4))  # 6 inches wide, 4 inches tall
plt.plot([1, 2, 3], [4, 5, 6], linewidth=3.5)  # Line width in points
plt.xlabel('X-axis', fontsize=12)  # Text size in points
plt.ylabel('Y-axis', fontsize=12)
plt.show()
输出

以下是上述代码的输出 -

Points

英寸 (in)

英寸用于在 Matplotlib 中指定图形或子图的整体大小。例如,**figsize = (width, height)**(以英寸为单位)定义图形的宽度和高度。

示例

在这个例子中,我们以英寸为单位指定了图形的大小。

import matplotlib.pyplot as plt
plt.figure(figsize=(4, 4))  # 6 inches wide, 4 inches tall
plt.plot([1, 2, 3], [4, 5, 6])
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Example Plot with 4x4 Inches')
plt.show()
输出

以下是上述代码的输出 -

Inches

转换

英寸与 Matplotlib 中常用的其他单位之间的转换系数

1 英寸 ≈ 2.54 厘米

数据单位

数据单位表示沿 x 轴和 y 轴绘制的实际值。Matplotlib 使用这些单位将数据点绘制到图表上。从数据单位到绘图上物理单位的转换由坐标轴比例尺(例如线性、对数等)决定。

关于 Matplotlib 中数据单位的关键点

**数值数据** - 数据单位表示我们沿 x 轴和 y 轴绘制的数值。

**映射到绘图空间** - Matplotlib 根据定义的坐标轴限制和缩放比例,将这些数值数据值映射到绘图空间中的特定位置。

**绘制数据** - 当我们使用 Matplotlib 绘制数据时,我们必须使用数值数据指定 x 和 y 坐标。Matplotlib 会处理这些数据点在绘图中的缩放和定位。

**坐标轴限制** - 使用 **xlim** 设置 x 轴限制,使用 **ylim** 设置 y 轴限制,定义绘图中显示的数据单位范围。

**坐标轴刻度** - 坐标轴上的刻度表示特定数据单位,为绘图中存在的数据范围提供视觉参考。

示例

在这个例子中,我们设置了绘图的数据单位。

import matplotlib.pyplot as plt

# Sample data
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

# Plotting using data units
plt.plot(x, y, marker='o')

# Setting axis limits in data units
plt.xlim(0, 6)  # X-axis limits from 0 to 6
plt.ylim(0, 12)  # Y-axis limits from 0 to 12
plt.xlabel('X-axis (Data Units)')
plt.ylabel('Y-axis (Data Units)')
plt.title('Plot with Data Units')
plt.show()
输出

以下是上述代码的输出 -

Data Units

理解 Matplotlib 中的数据单位对于准确地可视化数据并确保绘制的表示与底层数值正确对应至关重要。

坐标轴坐标

坐标轴坐标的范围是从 0.0 到 1.0,它指定单个子图或坐标轴内的相对位置。**(0, 0)** 表示子图的左下角,**(1, 1)** 表示子图的右上角。

坐标轴坐标提供了一种灵活的方法,可以在子图内相对于其大小和边界来定位注释、文本或其他元素,确保在不同绘图大小或尺寸下的一致性和响应性定位。

示例

在这个例子中,我们设置了绘图的坐标轴坐标 x 和 y。

import matplotlib.pyplot as plt

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

# Plotting data
ax.plot([1, 2, 3], [2, 4, 3])

# Annotating at axes coordinates
ax.annotate('Important Point', 
   xy=(2, 4),               # Data point to annotate
   xytext=(0.5, 0.5),       # Position in axes coordinates
   textcoords='axes fraction',  # Specifying axes coordinates
   arrowprops=dict(facecolor='black', arrowstyle='->'))
plt.show()
输出

以下是上述代码的输出 -

Axes

图形坐标

图形坐标的范围也是从 **0.0** 到 **1.0**,但是它相对于整个图形画布指定位置。**(0, 0)** 是整个图形的左下角,**(1, 1)** 是整个图形的右上角。

示例

这是一个设置绘图图形坐标的示例。

import matplotlib.pyplot as plt

# Creating subplots
fig, (ax1, ax2) = plt.subplots(1, 2)

# Plotting data in subplot 1
ax1.plot([1, 2, 3], [2, 4, 3])

# Plotting data in subplot 2
ax2.plot([1, 2, 3], [3, 1, 4])

# Annotating at figure coordinates
fig.text(0.5, 0.9, 'Figure Annotation', ha='center', fontsize=12, color='red')
plt.show()
输出

以下是上述代码的输出 -

Figure Coordinates

使用 Matplotlib 绘制所有基本单位的图形

此示例展示了在 Matplotlib 中使用各种单位,例如英寸表示图形大小,磅表示文本大小,数据单位表示绘制数据点,以及坐标轴坐标表示在子图中定位注释。

示例

import matplotlib.pyplot as plt

# Define a figure with specified size in inches
fig = plt.figure(figsize=(6, 4))  # Width: 6 inches, Height: 4 inches

# Create an axis within the figure
ax = fig.add_subplot(111)

# Plotting data points using data units
x = [1, 2, 3, 4]
y = [2, 4, 6, 8]
ax.plot(x, y, marker='o')

# Setting labels and titles using text in points
ax.set_xlabel('X-axis Label', fontsize=12)
ax.set_ylabel('Y-axis Label', fontsize=12)
ax.set_title('Plot Title', fontsize=14)

# Setting the position of a text annotation using axes coordinates
ax.text(0.5, 0.5, 'Annotation', transform=ax.transAxes, fontsize=10)
plt.show()
输出

以下是上述代码的输出 -

Overall Units
广告