在Matplotlib中使用scatter()添加图例到3D散点图
参考:Add a legend in a 3D scatterplot with scatter() in Matplotlib
在数据可视化的过程中,3D散点图是一种非常有用的工具,它可以帮助我们从三个维度分析数据的分布和关系。Matplotlib库提供了强大的绘图工具,其中scatter()
函数可以用来创建3D散点图。在本文中,我们将详细介绍如何在Matplotlib中使用scatter()
函数创建3D散点图,并添加图例来增强图表的信息表达能力。
1. 基础3D散点图
首先,我们需要了解如何创建一个基本的3D散点图。以下是一个简单的示例:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
# 创建数据
x = np.random.standard_normal(100)
y = np.random.standard_normal(100)
z = np.random.standard_normal(100)
# 创建图形和轴
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# 绘制散点图
scatter = ax.scatter(x, y, z, c='r', label='how2matplotlib.com Red Points')
# 显示图例
ax.legend()
# 显示图形
plt.show()
Output:
2. 添加图例
在3D散点图中添加图例是一个重要的步骤,因为它可以帮助观众理解图中的不同数据点代表的含义。下面是如何添加图例的示例:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
# 创建数据
x = np.random.standard_normal(100)
y = np.random.standard_normal(100)
z = np.random.standard_normal(100)
# 创建图形和轴
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# 绘制散点图
scatter = ax.scatter(x, y, z, c='b', label='how2matplotlib.com Blue Points')
# 显示图例
ax.legend()
# 显示图形
plt.show()
Output:
3. 自定义图例
我们可以通过修改legend()
函数的参数来自定义图例的样式和位置。以下是一些自定义图例的示例:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
# 创建数据
x = np.random.standard_normal(100)
y = np.random.standard_normal(100)
z = np.random.standard_normal(100)
# 创建图形和轴
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# 绘制散点图
scatter = ax.scatter(x, y, z, c='g', label='how2matplotlib.com Green Points')
# 自定义图例
ax.legend(loc='upper left', shadow=True, fontsize='large')
# 显示图形
plt.show()
Output:
4. 多组数据的图例
当3D散点图中包含多组数据时,为每组数据添加图例是非常有用的。以下是一个包含多组数据的图例示例:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
# 创建数据
x1 = np.random.standard_normal(100)
y1 = np.random.standard_normal(100)
z1 = np.random.standard_normal(100)
x2 = np.random.standard_normal(100)
y2 = np.random.standard_normal(100)
z2 = np.random.standard_normal(100)
# 创建图形和轴
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# 绘制第一组散点图
scatter1 = ax.scatter(x1, y1, z1, c='m', label='how2matplotlib.com Magenta Points')
# 绘制第二组散点图
scatter2 = ax.scatter(x2, y2, z2, c='y', label='how2matplotlib.com Yellow Points')
# 显示图例
ax.legend()
# 显示图形
plt.show()
Output:
5. 图例的交互性
在某些情况下,我们可能希望图例具有交互性,比如点击图例中的标签来显示或隐藏对应的数据点。以下是如何实现这一功能的示例:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
# 创建数据
x = np.random.standard_normal(100)
y = np.random.standard_normal(100)
z = np.random.standard_normal(100)
# 创建图形和轴
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# 绘制散点图
scatter = ax.scatter(x, y, z, c='c', label='how2matplotlib.com Cyan Points')
# 使图例具有交互性
legend = ax.legend()
legend.set_picker(True)
def on_pick(event):
legline = event.artist
origline = scatter
vis = not origline.get_visible()
origline.set_visible(vis)
if vis:
legline.set_alpha(1.0)
else:
legline.set_alpha(0.2)
fig.canvas.draw()
fig.canvas.mpl_connect('pick_event', on_pick)
# 显示图形
plt.show()
Output:
以上示例展示了如何在Matplotlib中使用scatter()
函数创建3D散点图,并通过添加图例来增强图表的表达力。通过这些示例,你可以学会如何为你的3D散点图添加、自定义以及交互图例,从而使你的数据可视化更加有效和吸引人。