Matplotlib散点图绘制全攻略:从基础到高级技巧

Matplotlib散点图绘制全攻略:从基础到高级技巧

参考:matplotlib scatter

Matplotlib是Python中最流行的数据可视化库之一,而散点图(Scatter Plot)是其中一种常用且强大的图表类型。本文将全面介绍如何使用Matplotlib绘制散点图,从基础用法到高级技巧,帮助您掌握这一重要的数据可视化工具。

1. 散点图基础

散点图是一种用于展示两个变量之间关系的图表类型。它通过在二维平面上绘制点来表示数据,每个点的位置由其x和y坐标决定。散点图常用于探索变量之间的相关性、识别数据模式和异常值。

让我们从一个简单的散点图开始:

import matplotlib.pyplot as plt
import numpy as np

# 生成示例数据
x = np.random.rand(50)
y = np.random.rand(50)

# 创建散点图
plt.figure(figsize=(8, 6))
plt.scatter(x, y)
plt.title('Basic Scatter Plot - how2matplotlib.com')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.show()

Output:

Matplotlib散点图绘制全攻略:从基础到高级技巧

在这个例子中,我们使用numpy生成了50个随机数据点,然后使用plt.scatter()函数绘制散点图。figsize参数设置图表大小,titlexlabelylabel分别设置图表标题和坐标轴标签。

2. 自定义点的样式

Matplotlib提供了多种方式来自定义散点图中点的外观,包括颜色、大小、形状等。

2.1 设置颜色

您可以通过c参数设置点的颜色:

import matplotlib.pyplot as plt
import numpy as np

x = np.random.rand(50)
y = np.random.rand(50)

plt.figure(figsize=(8, 6))
plt.scatter(x, y, c='red')
plt.title('Scatter Plot with Custom Color - how2matplotlib.com')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.show()

Output:

Matplotlib散点图绘制全攻略:从基础到高级技巧

这里我们将所有点的颜色设置为红色。您也可以使用RGB值或颜色名称来指定颜色。

2.2 设置大小

使用s参数可以调整点的大小:

import matplotlib.pyplot as plt
import numpy as np

x = np.random.rand(50)
y = np.random.rand(50)
sizes = np.random.randint(10, 100, 50)

plt.figure(figsize=(8, 6))
plt.scatter(x, y, s=sizes)
plt.title('Scatter Plot with Variable Sizes - how2matplotlib.com')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.show()

Output:

Matplotlib散点图绘制全攻略:从基础到高级技巧

在这个例子中,我们为每个点随机生成了不同的大小。

2.3 设置形状

通过marker参数可以改变点的形状:

import matplotlib.pyplot as plt
import numpy as np

x = np.random.rand(50)
y = np.random.rand(50)

plt.figure(figsize=(8, 6))
plt.scatter(x, y, marker='s')  # 's' 表示正方形
plt.title('Scatter Plot with Square Markers - how2matplotlib.com')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.show()

Output:

Matplotlib散点图绘制全攻略:从基础到高级技巧

常用的marker形状包括’o’(圆形)、’s’(正方形)、’^’(三角形)等。

3. 多组数据的散点图

在实际应用中,我们经常需要在同一张图上绘制多组数据的散点图。

import matplotlib.pyplot as plt
import numpy as np

x1 = np.random.rand(50)
y1 = np.random.rand(50)
x2 = np.random.rand(50)
y2 = np.random.rand(50)

plt.figure(figsize=(8, 6))
plt.scatter(x1, y1, c='blue', label='Group 1')
plt.scatter(x2, y2, c='red', label='Group 2')
plt.title('Multiple Groups Scatter Plot - how2matplotlib.com')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.legend()
plt.show()

Output:

Matplotlib散点图绘制全攻略:从基础到高级技巧

在这个例子中,我们绘制了两组数据,并使用不同的颜色进行区分。label参数用于设置图例标签,plt.legend()用于显示图例。

4. 颜色映射

颜色映射是一种强大的技术,可以用来表示第三个维度的数据。

import matplotlib.pyplot as plt
import numpy as np

x = np.random.rand(100)
y = np.random.rand(100)
colors = np.random.rand(100)

plt.figure(figsize=(8, 6))
scatter = plt.scatter(x, y, c=colors, cmap='viridis')
plt.colorbar(scatter)
plt.title('Scatter Plot with Color Mapping - how2matplotlib.com')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.show()

Output:

Matplotlib散点图绘制全攻略:从基础到高级技巧

在这个例子中,我们使用cmap参数指定了颜色映射方案,并添加了一个颜色条来显示颜色与数值的对应关系。

5. 气泡图

气泡图是散点图的一种变体,它使用点的大小来表示第三个维度的数据。

import matplotlib.pyplot as plt
import numpy as np

x = np.random.rand(50)
y = np.random.rand(50)
sizes = np.random.randint(20, 500, 50)
colors = np.random.rand(50)

plt.figure(figsize=(10, 8))
scatter = plt.scatter(x, y, s=sizes, c=colors, alpha=0.5, cmap='viridis')
plt.colorbar(scatter)
plt.title('Bubble Chart - how2matplotlib.com')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.show()

Output:

Matplotlib散点图绘制全攻略:从基础到高级技巧

在这个例子中,我们同时使用了点的大小和颜色来表示额外的信息。alpha参数用于设置点的透明度。

6. 3D散点图

Matplotlib还支持绘制3D散点图,这需要使用mpl_toolkits.mplot3d模块。

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='3d')

n = 100
x = np.random.rand(n)
y = np.random.rand(n)
z = np.random.rand(n)
colors = np.random.rand(n)

scatter = ax.scatter(x, y, z, c=colors, cmap='viridis')
plt.colorbar(scatter)
ax.set_title('3D Scatter Plot - how2matplotlib.com')
ax.set_xlabel('X-axis')
ax.set_ylabel('Y-axis')
ax.set_zlabel('Z-axis')
plt.show()

Output:

Matplotlib散点图绘制全攻略:从基础到高级技巧

这个例子展示了如何创建一个3D散点图,并使用颜色来表示第四个维度的数据。

7. 散点图矩阵

散点图矩阵是一种用于同时展示多个变量之间关系的图表类型。

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from pandas.plotting import scatter_matrix

# 创建示例数据
data = {
    'A': np.random.rand(100),
    'B': np.random.rand(100),
    'C': np.random.rand(100),
    'D': np.random.rand(100)
}
df = pd.DataFrame(data)

# 创建散点图矩阵
fig, ax = plt.subplots(figsize=(12, 10))
scatter_matrix(df, ax=ax, diagonal='hist')
plt.suptitle('Scatter Plot Matrix - how2matplotlib.com', y=1.02)
plt.tight_layout()
plt.show()

Output:

Matplotlib散点图绘制全攻略:从基础到高级技巧

这个例子使用了pandas的scatter_matrix函数来创建散点图矩阵。对角线上显示的是每个变量的直方图。

8. 添加误差条

在某些情况下,我们可能需要在散点图中显示误差范围。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 50)
y = np.sin(x) + np.random.normal(0, 0.1, 50)
yerr = np.random.uniform(0.05, 0.2, 50)

plt.figure(figsize=(10, 6))
plt.errorbar(x, y, yerr=yerr, fmt='o', capsize=5, capthick=1, ecolor='red')
plt.title('Scatter Plot with Error Bars - how2matplotlib.com')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.show()

Output:

Matplotlib散点图绘制全攻略:从基础到高级技巧

在这个例子中,我们使用plt.errorbar()函数来绘制带有误差条的散点图。yerr参数指定了y方向的误差范围,capsizecapthick参数用于调整误差条末端的样式。

9. 散点图与其他图表类型的结合

散点图可以与其他类型的图表结合使用,以提供更丰富的信息。

9.1 散点图与直方图结合

import matplotlib.pyplot as plt
import numpy as np

# 生成示例数据
x = np.random.randn(1000)
y = np.random.randn(1000)

# 创建图表
fig, ax = plt.subplots(figsize=(10, 10))

# 绘制散点图
ax.scatter(x, y, alpha=0.5)

# 绘制x轴直方图
ax_histx = ax.inset_axes([0, 1.05, 1, 0.2], sharex=ax)
ax_histx.hist(x, bins=50)
ax_histx.axis('off')

# 绘制y轴直方图
ax_histy = ax.inset_axes([1.05, 0, 0.2, 1], sharey=ax)
ax_histy.hist(y, bins=50, orientation='horizontal')
ax_histy.axis('off')

ax.set_title('Scatter Plot with Marginal Histograms - how2matplotlib.com')
ax.set_xlabel('X-axis')
ax.set_ylabel('Y-axis')
plt.show()

Output:

Matplotlib散点图绘制全攻略:从基础到高级技巧

这个例子展示了如何将散点图与边缘直方图结合,以同时显示数据的分布情况。

9.2 散点图与回归线

import matplotlib.pyplot as plt
import numpy as np
from scipy import stats

# 生成示例数据
x = np.random.rand(100)
y = 2 * x + 1 + np.random.normal(0, 0.1, 100)

# 计算回归线
slope, intercept, r_value, p_value, std_err = stats.linregress(x, y)
line = slope * x + intercept

# 绘制散点图和回归线
plt.figure(figsize=(10, 6))
plt.scatter(x, y, alpha=0.5)
plt.plot(x, line, color='red', label=f'y={slope:.2f}x+{intercept:.2f}')
plt.title('Scatter Plot with Regression Line - how2matplotlib.com')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.legend()
plt.show()

Output:

Matplotlib散点图绘制全攻略:从基础到高级技巧

这个例子展示了如何在散点图上添加回归线,以直观地显示数据的趋势。

10. 高级样式设置

Matplotlib提供了丰富的样式设置选项,可以让您的散点图更加美观和专业。

10.1 使用样式表

import matplotlib.pyplot as plt
import numpy as np

plt.style.use('seaborn')

x = np.random.rand(100)
y = np.random.rand(100)

plt.figure(figsize=(10, 6))
plt.scatter(x, y, alpha=0.7)
plt.title('Scatter Plot with Seaborn Style - how2matplotlib.com')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.show()

这个例子使用了Seaborn的样式,它提供了一种更现代和美观的外观。

10.2 自定义点的样式

import matplotlib.pyplot as plt
import numpy as np

x = np.random.rand(100)
y = np.random.rand(100)

plt.figure(figsize=(10, 6))
plt.scatter(x, y, s=100, c='skyblue', marker='*', 
            edgecolor='navy', linewidth=1.5, alpha=0.8)
plt.title('Scatter Plot with Custom Marker Style - how2matplotlib.com')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.grid(True, linestyle='--', alpha=0.7)
plt.show()

Output:

Matplotlib散点图绘制全攻略:从基础到高级技巧

这个例子展示了如何详细自定义散点的样式,包括大小、颜色、形状、边缘颜色和宽度等。

11. 交互式散点图

虽然Matplotlib主要用于静态图表,但它也可以创建简单的交互式图表。

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.widgets import Slider

# 初始数据
x = np.random.rand(100)
y = np.random.rand(100)

fig, ax = plt.subplots(figsize=(10, 8))
scatter = ax.scatter(x, y)
plt.subplots_adjust(bottom=0.25)

# 添加滑块
ax_slider = plt.axes([0.2, 0.1, 0.6, 0.03])
slider = Slider(ax_slider, 'Point Size', 1, 100, valinit=20)

def update(val):
    scatter.set_sizes([slider.val] * len(x))
    fig.canvas.draw_idle()

slider.on_changed(update)

plt.title('Interactive Scatter Plot- how2matplotlib.com')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.show()

Output:

Matplotlib散点图绘制全攻略:从基础到高级技巧

这个例子创建了一个带有滑块的交互式散点图,允许用户动态调整点的大小。

12. 散点图中的文本标注

有时我们需要在散点图中为特定的点添加文本标注。

import matplotlib.pyplot as plt
import numpy as np

x = np.random.rand(20)
y = np.random.rand(20)
labels = [f'Point {i+1}' for i in range(20)]

plt.figure(figsize=(10, 8))
plt.scatter(x, y)

for i, label in enumerate(labels):
    plt.annotate(label, (x[i], y[i]), xytext=(5, 5), textcoords='offset points')

plt.title('Scatter Plot with Text Annotations - how2matplotlib.com')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.show()

Output:

Matplotlib散点图绘制全攻略:从基础到高级技巧

这个例子展示了如何为散点图中的每个点添加文本标注。

13. 散点图的密度表示

当数据点非常多时,普通的散点图可能会变得难以解读。在这种情况下,我们可以使用密度散点图。

import matplotlib.pyplot as plt
import numpy as np

# 生成大量数据点
n = 10000
x = np.random.randn(n)
y = np.random.randn(n)

plt.figure(figsize=(10, 8))
plt.hexbin(x, y, gridsize=20, cmap='YlOrRd')
plt.colorbar(label='Count in bin')
plt.title('Hexbin Density Plot - how2matplotlib.com')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.show()

Output:

Matplotlib散点图绘制全攻略:从基础到高级技巧

这个例子使用hexbin函数创建了一个六边形分箱的密度图,颜色表示每个六边形区域内的点的数量。

14. 散点图的动画

Matplotlib还支持创建简单的动画,这可以用来展示数据随时间的变化。

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.animation import FuncAnimation

fig, ax = plt.subplots(figsize=(10, 8))
scatter = ax.scatter([], [])
ax.set_xlim(0, 1)
ax.set_ylim(0, 1)

def update(frame):
    x = np.random.rand(20)
    y = np.random.rand(20)
    scatter.set_offsets(np.c_[x, y])
    return scatter,

ani = FuncAnimation(fig, update, frames=200, interval=50, blit=True)
plt.title('Animated Scatter Plot - how2matplotlib.com')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.show()

Output:

Matplotlib散点图绘制全攻略:从基础到高级技巧

这个例子创建了一个简单的散点图动画,每帧都会更新点的位置。

15. 散点图的子图

在某些情况下,我们可能需要在一个图形中绘制多个相关的散点图。

import matplotlib.pyplot as plt
import numpy as np

fig, axs = plt.subplots(2, 2, figsize=(12, 10))
fig.suptitle('Multiple Scatter Plots - how2matplotlib.com')

for ax in axs.flat:
    x = np.random.rand(50)
    y = np.random.rand(50)
    ax.scatter(x, y)
    ax.set_xlabel('X-axis')
    ax.set_ylabel('Y-axis')

plt.tight_layout()
plt.show()

Output:

Matplotlib散点图绘制全攻略:从基础到高级技巧

这个例子创建了一个2×2的子图网格,每个子图都包含一个散点图。

结论

Matplotlib的散点图功能非常强大和灵活,可以满足各种数据可视化需求。从基本的散点图到高级的3D散点图、动画散点图,以及与其他图表类型的结合,Matplotlib都提供了丰富的选项。通过本文介绍的各种技巧和示例,您应该能够创建出既美观又信息丰富的散点图。

记住,好的数据可视化不仅仅是about技术实现,更重要的是要清晰地传达数据中的信息和洞见。因此,在使用这些技巧时,始终要考虑您的目标受众和您想要传达的核心信息。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程