Matplotlib 空心圆标记:如何绘制和自定义
参考:matplotlib markers empty circle
Matplotlib 是 Python 中最流行的数据可视化库之一,它提供了丰富的绘图功能和选项。在数据可视化中,标记是一个重要的元素,用于突出显示数据点或特定位置。空心圆标记是一种常用的标记类型,它既简洁又易于识别。本文将深入探讨如何在 Matplotlib 中使用和自定义空心圆标记,帮助你更好地展示你的数据。
1. 空心圆标记的基础知识
空心圆标记在 Matplotlib 中被称为 “circle” 或 “o”。它是一种常用的标记类型,特别适合于散点图或线图中表示数据点。使用空心圆标记可以让你的图表更加清晰,尤其是当你需要区分多个数据系列时。
以下是一个基本的示例,展示了如何在散点图中使用空心圆标记:
import matplotlib.pyplot as plt
import numpy as np
# 生成示例数据
x = np.linspace(0, 10, 50)
y = np.sin(x)
# 创建图形和坐标轴
plt.figure(figsize=(8, 6))
# 绘制带有空心圆标记的散点图
plt.scatter(x, y, marker='o', facecolors='none', edgecolors='blue')
# 设置标题和轴标签
plt.title('Sine Wave with Empty Circle Markers - how2matplotlib.com')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
# 显示图形
plt.show()
Output:
在这个示例中,我们使用 plt.scatter()
函数绘制散点图。marker='o'
参数指定使用圆形标记,facecolors='none'
使标记内部透明,edgecolors='blue'
设置标记边缘为蓝色,从而创建空心圆效果。
2. 自定义空心圆标记的大小
标记的大小对于图表的可读性和美观性都很重要。Matplotlib 允许你轻松调整标记的大小。以下示例展示了如何设置不同大小的空心圆标记:
import matplotlib.pyplot as plt
import numpy as np
# 生成示例数据
x = np.array([1, 2, 3, 4, 5])
y = np.array([1, 4, 2, 3, 5])
# 创建图形和坐标轴
plt.figure(figsize=(10, 6))
# 绘制不同大小的空心圆标记
sizes = [20, 50, 100, 200, 300]
for i in range(len(x)):
plt.scatter(x[i], y[i], s=sizes[i], marker='o', facecolors='none', edgecolors='red')
# 设置标题和轴标签
plt.title('Empty Circle Markers with Different Sizes - how2matplotlib.com')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
# 显示图形
plt.show()
Output:
在这个示例中,我们使用 s
参数来设置标记的大小。s
参数接受一个数值或数组,表示标记的面积(以平方点为单位)。通过提供不同的大小值,我们创建了一系列逐渐增大的空心圆标记。
3. 自定义空心圆标记的颜色
颜色是数据可视化中另一个重要的视觉元素。Matplotlib 提供了多种方式来设置标记的颜色。以下示例展示了如何为空心圆标记设置不同的边缘颜色:
import matplotlib.pyplot as plt
import numpy as np
# 生成示例数据
x = np.array([1, 2, 3, 4, 5])
y = np.array([1, 4, 2, 3, 5])
# 创建图形和坐标轴
plt.figure(figsize=(10, 6))
# 绘制不同颜色的空心圆标记
colors = ['red', 'green', 'blue', 'purple', 'orange']
for i in range(len(x)):
plt.scatter(x[i], y[i], s=100, marker='o', facecolors='none', edgecolors=colors[i])
# 设置标题和轴标签
plt.title('Empty Circle Markers with Different Colors - how2matplotlib.com')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
# 显示图形
plt.show()
Output:
在这个示例中,我们使用 edgecolors
参数来设置每个空心圆标记的边缘颜色。通过提供不同的颜色值,我们创建了一系列具有不同边缘颜色的空心圆标记。
4. 调整空心圆标记的线宽
标记的线宽也是一个可以自定义的属性。调整线宽可以改变空心圆标记的视觉重量。以下示例展示了如何设置不同线宽的空心圆标记:
import matplotlib.pyplot as plt
import numpy as np
# 生成示例数据
x = np.array([1, 2, 3, 4, 5])
y = np.array([1, 4, 2, 3, 5])
# 创建图形和坐标轴
plt.figure(figsize=(10, 6))
# 绘制不同线宽的空心圆标记
linewidths = [0.5, 1, 1.5, 2, 2.5]
for i in range(len(x)):
plt.scatter(x[i], y[i], s=100, marker='o', facecolors='none', edgecolors='blue', linewidths=linewidths[i])
# 设置标题和轴标签
plt.title('Empty Circle Markers with Different Line Widths - how2matplotlib.com')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
# 显示图形
plt.show()
Output:
在这个示例中,我们使用 linewidths
参数来设置空心圆标记的线宽。通过提供不同的线宽值,我们创建了一系列具有不同边缘粗细的空心圆标记。
5. 结合线条和空心圆标记
在许多情况下,你可能想要在同一图表中结合使用线条和标记。Matplotlib 允许你轻松地实现这一点。以下示例展示了如何在线图中添加空心圆标记:
import matplotlib.pyplot as plt
import numpy as np
# 生成示例数据
x = np.linspace(0, 10, 20)
y = np.sin(x)
# 创建图形和坐标轴
plt.figure(figsize=(10, 6))
# 绘制带有空心圆标记的线图
plt.plot(x, y, marker='o', markersize=10, markerfacecolor='none', markeredgecolor='red', linestyle='-', color='blue')
# 设置标题和轴标签
plt.title('Line Plot with Empty Circle Markers - how2matplotlib.com')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
# 显示图形
plt.show()
Output:
在这个示例中,我们使用 plt.plot()
函数同时绘制线条和标记。marker='o'
指定使用圆形标记,markersize
设置标记大小,markerfacecolor='none'
使标记内部透明,markeredgecolor='red'
设置标记边缘为红色。linestyle='-'
和 color='blue'
分别设置线条样式和颜色。
6. 在多个数据系列中使用空心圆标记
当你需要在同一图表中比较多个数据系列时,使用不同的标记类型和颜色可以帮助区分它们。以下示例展示了如何在多个数据系列中使用空心圆标记:
import matplotlib.pyplot as plt
import numpy as np
# 生成示例数据
x = np.linspace(0, 10, 50)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.tan(x)
# 创建图形和坐标轴
plt.figure(figsize=(12, 8))
# 绘制多个数据系列,使用不同颜色的空心圆标记
plt.plot(x, y1, marker='o', markersize=8, markerfacecolor='none', markeredgecolor='red', linestyle='-', color='red', label='Sin')
plt.plot(x, y2, marker='o', markersize=8, markerfacecolor='none', markeredgecolor='blue', linestyle='-', color='blue', label='Cos')
plt.plot(x, y3, marker='o', markersize=8, markerfacecolor='none', markeredgecolor='green', linestyle='-', color='green', label='Tan')
# 设置标题和轴标签
plt.title('Multiple Series with Empty Circle Markers - how2matplotlib.com')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
# 添加图例
plt.legend()
# 显示图形
plt.show()
Output:
在这个示例中,我们绘制了三个不同的三角函数,每个函数都使用不同颜色的空心圆标记和线条。通过使用 label
参数和 plt.legend()
函数,我们还添加了一个图例来帮助识别每个数据系列。
7. 使用空心圆标记突出显示特定数据点
有时,你可能想要突出显示数据集中的特定点。空心圆标记非常适合这种情况。以下示例展示了如何在一个普通线图中使用空心圆标记来突出显示某些数据点:
import matplotlib.pyplot as plt
import numpy as np
# 生成示例数据
x = np.linspace(0, 10, 100)
y = np.sin(x)
# 选择要突出显示的点
highlight_x = [2, 5, 8]
highlight_y = np.sin(highlight_x)
# 创建图形和坐标轴
plt.figure(figsize=(10, 6))
# 绘制主线图
plt.plot(x, y, color='blue')
# 使用空心圆标记突出显示特定点
plt.scatter(highlight_x, highlight_y, s=100, marker='o', facecolors='none', edgecolors='red', linewidths=2)
# 设置标题和轴标签
plt.title('Sine Wave with Highlighted Points - how2matplotlib.com')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
# 显示图形
plt.show()
Output:
在这个示例中,我们首先绘制了一个普通的正弦波线图。然后,我们使用 plt.scatter()
函数在选定的 x 坐标位置添加了大型的空心圆标记,以突出显示这些特定的数据点。
8. 在误差线图中使用空心圆标记
误差线图是科学和统计可视化中常用的图表类型。空心圆标记可以有效地用于表示数据点,同时误差线表示不确定性。以下示例展示了如何在误差线图中使用空心圆标记:
import matplotlib.pyplot as plt
import numpy as np
# 生成示例数据
x = np.array([1, 2, 3, 4, 5])
y = np.array([1, 4, 2, 3, 5])
yerr = np.array([0.1, 0.2, 0.3, 0.2, 0.1])
# 创建图形和坐标轴
plt.figure(figsize=(10, 6))
# 绘制误差线图,使用空心圆标记
plt.errorbar(x, y, yerr=yerr, fmt='o', markersize=10, markerfacecolor='none', markeredgecolor='blue',
ecolor='red', capsize=5)
# 设置标题和轴标签
plt.title('Error Bar Plot with Empty Circle Markers - how2matplotlib.com')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
# 显示图形
plt.show()
Output:
在这个示例中,我们使用 plt.errorbar()
函数创建误差线图。fmt='o'
参数指定使用圆形标记,markersize
设置标记大小,markerfacecolor='none'
和 markeredgecolor='blue'
创建蓝色边缘的空心圆标记。yerr
参数指定误差值,ecolor='red'
设置误差线的颜色,capsize=5
设置误差线末端横杠的大小。
9. 在极坐标图中使用空心圆标记
极坐标图是另一种有趣的图表类型,特别适用于周期性数据或角度数据。空心圆标记在极坐标图中也可以有效使用。以下示例展示了如何在极坐标图中使用空心圆标记:
import matplotlib.pyplot as plt
import numpy as np
# 生成示例数据
theta = np.linspace(0, 2*np.pi, 20)
r = 10 * np.abs(np.sin(theta))
# 创建极坐标图
fig, ax = plt.subplots(figsize=(10, 10), subplot_kw=dict(projection='polar'))
# 绘制极坐标图,使用空心圆标记
ax.scatter(theta, r, marker='o', s=100, facecolors='none', edgecolors='purple')
# 设置标题
ax.set_title('Polar Plot with Empty Circle Markers- how2matplotlib.com')
# 显示图形
plt.show()
Output:
在这个示例中,我们使用 subplot_kw=dict(projection='polar')
创建一个极坐标子图。然后,我们使用 ax.scatter()
函数在极坐标系中绘制数据点,使用空心圆标记。theta
表示角度,r
表示半径。
10. 使用空心圆标记创建气泡图
气泡图是散点图的一种变体,其中数据点的大小表示第三个变量。空心圆标记非常适合创建气泡图,因为它们可以清晰地显示大小差异。以下示例展示了如何使用空心圆标记创建气泡图:
import matplotlib.pyplot as plt
import numpy as np
# 生成示例数据
x = np.array([1, 2, 3, 4, 5])
y = np.array([1, 4, 2, 3, 5])
sizes = np.array([20, 50, 100, 200, 500])
# 创建图形和坐标轴
plt.figure(figsize=(10, 8))
# 绘制气泡图,使用空心圆标记
plt.scatter(x, y, s=sizes, marker='o', facecolors='none', edgecolors='green', linewidths=2)
# 设置标题和轴标签
plt.title('Bubble Chart with Empty Circle Markers - how2matplotlib.com')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
# 显示图形
plt.show()
Output:
在这个示例中,我们使用 plt.scatter()
函数创建气泡图。s
参数用于设置标记的大小,它接受一个数组,使得每个数据点可以有不同的大小。通过设置 facecolors='none'
和 edgecolors='green'
,我们创建了绿色边缘的空心圆标记。
11. 在箱线图中添加空心圆标记
箱线图通常用于显示数据分布的关键统计信息。虽然箱线图本身不使用标记,但我们可以添加空心圆标记来表示异常值或其他特殊数据点。以下示例展示了如何在箱线图中添加空心圆标记:
import matplotlib.pyplot as plt
import numpy as np
# 生成示例数据
data = [np.random.normal(0, std, 100) for std in range(1, 4)]
# 创建图形和坐标轴
fig, ax = plt.subplots(figsize=(10, 6))
# 绘制箱线图
bp = ax.boxplot(data)
# 添加空心圆标记表示异常值
for i, d in enumerate(data):
outliers = d[np.abs(d - np.mean(d)) > 2 * np.std(d)]
ax.scatter([i+1] * len(outliers), outliers, marker='o', s=50, facecolors='none', edgecolors='red')
# 设置标题和轴标签
ax.set_title('Box Plot with Empty Circle Markers for Outliers - how2matplotlib.com')
ax.set_xlabel('Groups')
ax.set_ylabel('Values')
# 显示图形
plt.show()
Output:
在这个示例中,我们首先使用 ax.boxplot()
函数创建基本的箱线图。然后,我们遍历每组数据,找出异常值(这里定义为超过2个标准差的值),并使用 ax.scatter()
函数添加空心圆标记来表示这些异常值。
12. 在热图中使用空心圆标记
热图通常用于显示矩阵数据,但有时我们可能想要在热图上突出显示某些特定的单元格。空心圆标记可以用来实现这一目的。以下示例展示了如何在热图中添加空心圆标记:
import matplotlib.pyplot as plt
import numpy as np
# 生成示例数据
data = np.random.rand(10, 10)
# 创建图形和坐标轴
fig, ax = plt.subplots(figsize=(10, 8))
# 绘制热图
im = ax.imshow(data, cmap='viridis')
# 添加颜色条
plt.colorbar(im)
# 添加空心圆标记突出显示某些单元格
highlight_cells = [(2, 3), (5, 7), (8, 1)]
for cell in highlight_cells:
ax.scatter(cell[1], cell[0], s=500, marker='o', facecolors='none', edgecolors='red', linewidths=2)
# 设置标题
ax.set_title('Heatmap with Empty Circle Markers - how2matplotlib.com')
# 显示图形
plt.show()
Output:
在这个示例中,我们首先使用 ax.imshow()
函数创建基本的热图。然后,我们定义了一个包含要突出显示的单元格坐标的列表。使用 ax.scatter()
函数,我们在这些坐标上添加了大型的空心圆标记。注意,在热图中,x和y坐标是反转的,所以我们在 scatter()
函数中交换了坐标顺序。
13. 在3D散点图中使用空心圆标记
Matplotlib 也支持创建3D图表,我们可以在3D散点图中使用空心圆标记。以下示例展示了如何在3D空间中使用空心圆标记:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
# 生成示例数据
n = 100
x = np.random.rand(n)
y = np.random.rand(n)
z = np.random.rand(n)
# 创建3D图形
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='3d')
# 绘制3D散点图,使用空心圆标记
ax.scatter(x, y, z, s=50, marker='o', facecolors='none', edgecolors='blue')
# 设置标题和轴标签
ax.set_title('3D Scatter Plot with Empty Circle Markers - how2matplotlib.com')
ax.set_xlabel('X-axis')
ax.set_ylabel('Y-axis')
ax.set_zlabel('Z-axis')
# 显示图形
plt.show()
Output:
在这个示例中,我们使用 fig.add_subplot(111, projection='3d')
创建一个3D子图。然后,我们使用 ax.scatter()
函数在3D空间中绘制数据点,使用空心圆标记。注意,在3D图中,标记的大小可能需要调整以获得最佳的视觉效果。
14. 使用空心圆标记创建星图
星图(也称为雷达图)是一种用于显示多变量数据的图表类型。我们可以使用空心圆标记来突出显示星图中的数据点。以下示例展示了如何创建带有空心圆标记的星图:
import matplotlib.pyplot as plt
import numpy as np
# 设置数据
categories = ['A', 'B', 'C', 'D', 'E', 'F']
values = [4, 3, 5, 2, 4, 3]
# 计算角度
angles = np.linspace(0, 2*np.pi, len(categories), endpoint=False)
# 闭合图形
values = np.concatenate((values, [values[0]]))
angles = np.concatenate((angles, [angles[0]]))
# 创建图形和极坐标子图
fig, ax = plt.subplots(figsize=(8, 8), subplot_kw=dict(projection='polar'))
# 绘制线条
ax.plot(angles, values)
# 添加空心圆标记
ax.scatter(angles, values, s=100, marker='o', facecolors='none', edgecolors='red')
# 设置刻度标签
ax.set_xticks(angles[:-1])
ax.set_xticklabels(categories)
# 设置标题
ax.set_title('Star Plot with Empty Circle Markers - how2matplotlib.com')
# 显示图形
plt.show()
Output:
在这个示例中,我们首先创建了一个极坐标子图。然后,我们使用 ax.plot()
函数绘制连接各点的线条,并使用 ax.scatter()
函数添加空心圆标记来突出显示每个数据点。
15. 在时间序列图中使用空心圆标记
时间序列图是一种常见的图表类型,用于显示随时间变化的数据。空心圆标记可以用来突出显示时间序列中的特定数据点。以下示例展示了如何在时间序列图中使用空心圆标记:
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
# 生成示例数据
dates = pd.date_range(start='2023-01-01', end='2023-12-31', freq='D')
values = np.cumsum(np.random.randn(len(dates)))
# 创建图形和坐标轴
fig, ax = plt.subplots(figsize=(12, 6))
# 绘制时间序列线图
ax.plot(dates, values)
# 添加空心圆标记突出显示某些日期
highlight_dates = ['2023-03-15', '2023-07-01', '2023-11-30']
highlight_values = [values[dates == d][0] for d in highlight_dates]
ax.scatter(highlight_dates, highlight_values, s=100, marker='o', facecolors='none', edgecolors='red')
# 设置标题和轴标签
ax.set_title('Time Series with Empty Circle Markers - how2matplotlib.com')
ax.set_xlabel('Date')
ax.set_ylabel('Value')
# 旋转x轴标签以避免重叠
plt.xticks(rotation=45)
# 调整布局
plt.tight_layout()
# 显示图形
plt.show()
Output:
在这个示例中,我们首先使用 ax.plot()
函数绘制基本的时间序列线图。然后,我们定义了一些要突出显示的日期,并使用 ax.scatter()
函数在这些日期对应的数据点上添加空心圆标记。
结论
通过本文的详细探讨,我们了解了如何在 Matplotlib 中使用和自定义空心圆标记。从基本的散点图到复杂的 3D 图表,空心圆标记都展现出了其versatility和实用性。我们学习了如何调整标记的大小、颜色和线宽,如何在不同类型的图表中应用空心圆标记,以及如何使用这些标记来突出显示重要的数据点。
空心圆标记不仅可以增强图表的视觉吸引力,还能有效地传达额外的信息。通过合理使用这些标记,你可以创建更加清晰、信息丰富的数据可视化。
记住,在使用标记时,要考虑到整体的设计美学和数据的清晰度。过多或过大的标记可能会使图表变得杂乱,而恰到好处的使用则可以极大地提升图表的可读性和吸引力。
最后,Matplotlib 的灵活性意味着你可以将本文中学到的技巧与其他绘图技术结合,创造出独特而富有洞察力的数据可视化。继续探索和实验,你会发现更多使用空心圆标记的创新方式。