3D 散点图在 Python Matplotlib 中的应用:使用色调色图和图例

3D 散点图在 Python Matplotlib 中的应用:使用色调色图和图例

参考: 3D scatterplots in Python Matplotlib with hue colormap and legend

在数据可视化中,3D 散点图是一种强大的工具,可以帮助我们理解和展示三维数据集中的模式和关系。使用 Python 的 Matplotlib 库,我们可以轻松创建包含色调色图和图例的 3D 散点图。本文将详细介绍如何使用 Matplotlib 创建和定制这些图表,并提供多个示例代码,帮助读者更好地理解和应用这些技术。

基础设置

在开始之前,我们需要确保安装了 Matplotlib 库。如果还未安装,可以通过以下命令进行安装:

pip install matplotlib

示例 1:创建基本的 3D 散点图

首先,我们从创建一个简单的 3D 散点图开始。这需要使用 mpl_toolkits.mplot3d 模块中的 Axes3D 类。

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

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.random.standard_normal(100)
y = np.random.standard_normal(100)
z = np.random.standard_normal(100)
ax.scatter(x, y, z)
ax.set_title("3D Scatter Plot - how2matplotlib.com")
plt.show()

Output:

3D 散点图在 Python Matplotlib 中的应用:使用色调色图和图例

示例 2:添加色调色图

为了更好地区分数据点,我们可以添加色调色图。色调色图可以根据数据点的某一属性(如大小、速度、温度等)来调整颜色。

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

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.random.standard_normal(100)
y = np.random.standard_normal(100)
z = np.random.standard_normal(100)
color = x**2 + y**2 + z**2  # Color by distance from origin
scatter = ax.scatter(x, y, z, c=color, cmap='viridis')
fig.colorbar(scatter)
ax.set_title("Colored 3D Scatter Plot - how2matplotlib.com")
plt.show()

Output:

3D 散点图在 Python Matplotlib 中的应用:使用色调色图和图例

示例 3:添加图例

图例对于理解图中的不同数据组非常重要。我们可以通过为散点图中的每种颜色或标记添加标签来创建图例。

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

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.random.standard_normal(100)
y = np.random.standard_normal(100)
z = np.random.standard_normal(100)
groups = np.random.choice(['Group A', 'Group B', 'Group C'], size=100)
colors = {'Group A': 'r', 'Group B': 'g', 'Group C': 'b'}
for g in np.unique(groups):
    ix = groups == g
    ax.scatter(x[ix], y[ix], z[ix], c=colors[g], label=g)
ax.legend()
ax.set_title("3D Scatter Plot with Legend - how2matplotlib.com")
plt.show()

Output:

3D 散点图在 Python Matplotlib 中的应用:使用色调色图和图例

示例 4:结合色调色图和图例

我们可以将色调色图和图例结合起来,以更详细地展示数据的特性。

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

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.random.standard_normal(100)
y = np.random.standard_normal(100)
z = np.random.standard_normal(100)
color = x**2 + y**2 + z**2
groups = np.random.choice(['Group A', 'Group B', 'Group C'], size=100)
scatter = ax.scatter(x, y, z, c=color, cmap='cool', label=groups)
legend1 = ax.legend(*scatter.legend_elements(), title="Groups")
ax.add_artist(legend1)
fig.colorbar(scatter, ax=ax, label='Distance from origin')
ax.set_title("Combined Color Map and Legend - how2matplotlib.com")
plt.show()

Output:

3D 散点图在 Python Matplotlib 中的应用:使用色调色图和图例

示例 5:调整标记大小

我们可以根据数据点的某些特性来调整标记的大小,使图表更具表现力。

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

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.random.standard_normal(100)
y = np.random.standard_normal(100)
z = np.random.standard_normal(100)
size = 50 * np.random.rand(100)
ax.scatter(x, y, z, s=size)
ax.set_title("3D Scatter Plot with Variable Sizes - how2matplotlib.com")
plt.show()

Output:

3D 散点图在 Python Matplotlib 中的应用:使用色调色图和图例

示例 6:自定义颜色映射

我们可以自定义颜色映射,以适应特定的视觉需求或强调数据中的特定区域。

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

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.random.standard_normal(100)
y = np.random.standard_normal(100)
z = np.random.standard_normal(100)
color = np.log(x**2 + y**2 + z**2 + 1)  # Log scale for color
scatter = ax.scatter(x, y, z, c=color, cmap='inferno')
fig.colorbar(scatter)
ax.set_title("3D Scatter Plot with Custom Color Map - how2matplotlib.com")
plt.show()

Output:

3D 散点图在 Python Matplotlib 中的应用:使用色调色图和图例

示例 7:使用不同的标记

在 Matplotlib 中,我们可以使用不同的标记样式来区分不同的数据点。

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

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.random.standard_normal(100)
y = np.random.standard_normal(100)
z = np.random.standard_normal(100)
markers = ['o', '^', 's']
groups = np.random.choice([0, 1, 2], size=100)
for m, g in enumerate(['Group A', 'Group B', 'Group C']):
    ix = groups == m
    ax.scatter(x[ix], y[ix], z[ix], marker=markers[m], label=g)
ax.legend()
ax.set_title("3D Scatter Plot with Different Markers - how2matplotlib.com")
plt.show()

Output:

3D 散点图在 Python Matplotlib 中的应用:使用色调色图和图例

示例 8:调整视角

调整视角可以帮助更好地理解三维空间中数据的分布。

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

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.random.standard_normal(100)
y = np.random.standard_normal(100)
z = np.random.standard_normal(100)
ax.scatter(x, y, z)
ax.view_init(elev=20, azim=45)  # Elevation and azimuth
ax.set_title("3D Scatter Plot with Custom View - how2matplotlib.com")
plt.show()

Output:

3D 散点图在 Python Matplotlib 中的应用:使用色调色图和图例

示例 9:动态更新数据点

在某些情况下,我们可能需要动态更新散点图中的数据点,以展示数据随时间的变化。

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

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x, y, z = np.random.standard_normal((3, 100))

scatter = ax.scatter(x, y, z)

def update(frame):
    scatter._offsets3d = (np.random.standard_normal(100), np.random.standard_normal(100), np.random.standard_normal(100))
    return scatter,

ani = FuncAnimation(fig, update, frames=10, interval=1000)
plt.show()

示例 10:结合多种数据类型

在一个图中结合多种数据类型,可以帮助我们从不同角度分析数据。

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

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.random.standard_normal(100)
y = np.random.standard_normal(100)
z = np.random.standard_normal(100)
sizes = 50 * np.random.rand(100)
colors = np.random.rand(100)
ax.scatter(x, y, z, s=sizes, c=colors, cmap='spring', alpha=0.6)
ax.set_title("3D Scatter Plot with Multiple Data Types - how2matplotlib.com")
plt.show()

Output:

3D 散点图在 Python Matplotlib 中的应用:使用色调色图和图例

示例 11:使用透明度调整

透明度(alpha 值)可以帮助我们在复杂的数据集中区分重叠的点。

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

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.random.standard_normal(100)
y = np.random.standard_normal(100)
z = np.random.standard_normal(100)
ax.scatter(x, y, z, alpha=0.5)
ax.set_title("3D Scatter Plot with Transparency - how2matplotlib.com")
plt.show()

Output:

3D 散点图在 Python Matplotlib 中的应用:使用色调色图和图例

示例 12:结合文本标签

在散点图中添加文本标签可以提供更多的信息,帮助解释数据点的含义。

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

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.random.standard_normal(10)
y = np.random.standard_normal(10)
z = np.random.standard_normal(10)
labels = ['Point {}'.format(i) for i in range(10)]
scatter = ax.scatter(x, y, z)

for i, txt in enumerate(labels):
    ax.text(x[i], y[i], z[i], txt, size=10, zorder=1, color='k')

ax.set_title("3D Scatter Plot with Labels - how2matplotlib.com")
plt.show()

Output:

3D 散点图在 Python Matplotlib 中的应用:使用色调色图和图例

示例 13:自定义坐标轴范围

自定义坐标轴范围可以帮助我们聚焦于特定区域的数据。

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

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.random.standard_normal(100)
y = np.random.standard_normal(100)
z = np.random.standard_normal(100)
ax.scatter(x, y, z)
ax.set_xlim([-3, 3])
ax.set_ylim([-3, 3])
ax.set_zlim([-3, 3])
ax.set_title("3D Scatter Plot with Custom Axis Limits - how2matplotlib.com")
plt.show()

Output:

3D 散点图在 Python Matplotlib 中的应用:使用色调色图和图例

示例 14:结合网格线

网格线可以帮助我们更好地理解数据点在空间中的位置。

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

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.random.standard_normal(100)
y = np.random.standard_normal(100)
z = np.random.standard_normal(100)
ax.scatter(x, y, z)
ax.grid(True)
ax.set_title("3D Scatter Plot with Grid Lines - how2matplotlib.com")
plt.show()

Output:

3D 散点图在 Python Matplotlib 中的应用:使用色调色图和图例

示例 15:使用不同的色图

色图的选择可以显著影响图表的视觉效果和解释。

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

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.random.standard_normal(100)
y = np.random.standard_normal(100)
z = np.random.standard_normal(100)
color = x**2 + y**2 + z**2
scatter = ax.scatter(x, y, z, c=color, cmap='plasma')
fig.colorbar(scatter)
ax.set_title("3D Scatter Plot with Plasma Color Map - how2matplotlib.com")
plt.show()

Output:

3D 散点图在 Python Matplotlib 中的应用:使用色调色图和图例

示例 16:结合不同的颜色和标记

结合不同的颜色和标记可以帮助区分属于不同类别的数据点。

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

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.random.standard_normal(100)
y = np.random.standard_normal(100)
z = np.random.standard_normal(100)
colors = np.random.rand(100)
markers = ['o', '^', 's']
groups = np.random.choice([0, 1, 2], size=100)

for m, g in enumerate(['Group A', 'Group B', 'Group C']):
    ix = groups == m
    ax.scatter(x[ix], y[ix], z[ix], marker=markers[m], c=colors[ix], label=g)

ax.legend()
ax.set_title("3D Scatter Plot with Different Colors and Markers - how2matplotlib.com")
plt.show()

Output:

3D 散点图在 Python Matplotlib 中的应用:使用色调色图和图例

示例 17:动态调整颜色映射的范围

动态调整颜色映射的范围可以帮助突出数据的特定特征。

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

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.random.standard_normal(100)
y = np.random.standard_normal(100)
z = np.random.standard_normal(100)
color = np.sin(x) + np.cos(y)
scatter = ax.scatter(x, y, z, c=color, cmap='coolwarm', vmin=-2, vmax=2)
fig.colorbar(scatter)
ax.set_title("3D Scatter Plot with Dynamic Color Range - how2matplotlib.com")
plt.show()

Output:

3D 散点图在 Python Matplotlib 中的应用:使用色调色图和图例

示例 18:添加标题和坐标轴标签

为散点图添加标题和坐标轴标签可以提供更多的上下文信息,帮助解释图表。

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

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.random.standard_normal(100)
y = np.random.standard_normal(100)
z = np.random.standard_normal(100)
ax.scatter(x, y, z)
ax.set_title("3D Scatter Plot with Title and Labels - how2matplotlib.com")
ax.set_xlabel("X Axis")
ax.set_ylabel("Y Axis")
ax.set_zlabel("Z Axis")
plt.show()

Output:

3D 散点图在 Python Matplotlib 中的应用:使用色调色图和图例

示例 19:使用自定义颜色

使用自定义颜色可以帮助品牌化或个性化你的图表。

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

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.random.standard_normal(100)
y = np.random.standard_normal(100)
z = np.random.standard_normal(100)
ax.scatter(x, y, z, color="#FF5733")  # Using a custom hex color
ax.set_title("3D Scatter Plot with Custom Color - how2matplotlib.com")
plt.show()

Output:

3D 散点图在 Python Matplotlib 中的应用:使用色调色图和图例

示例 20:结合多个图表

在一个画布上结合多个图表可以帮助比较不同数据集之间的关系。

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

fig = plt.figure(figsize=(14, 7))
ax1 = fig.add_subplot(121, projection='3d')
ax2 = fig.add_subplot(122, projection='3d')

x = np.random.standard_normal(100)
y = np.random.standard_normal(100)
z = np.random.standard_normal(100)
color = x**2 + y**2 + z**2

ax1.scatter(x, y, z, c=color, cmap='viridis')
ax1.set_title("Viridis Color Map - how2matplotlib.com")

ax2.scatter(x, y, z, c=color, cmap='magma')
ax2.set_title("Magma Color Map - how2matplotlib.com")

plt.show()

Output:

3D 散点图在 Python Matplotlib 中的应用:使用色调色图和图例

以上示例展示了如何使用 Python 的 Matplotlib 库来创建和定制包含色调色图和图例的 3D 散点图。通过这些示例,我们可以看到 Matplotlib 提供的强大功能和灵活性,使得它成为进行科学计算和数据可视化的理想选择。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程