Python 3D图中的图例

12
我正在Python 2.7中绘制一个三维图。当我尝试像2D plot()函数一样使用颜色和标记来绘制3D图时,遇到了错误。因此,我尝试分别使用scatter()函数单独绘制线条和带有标记的测量点。当我创建图例时,我的图例看起来像这样:

enter image description here

但我不想有重复的图例条目

  • 我希望我的图例条目按颜色分组,或者
  • 是否可能将标记和线路作为单个条目,以便我的图例中只有5个条目

我找到了一个类似的问题(如何在matplotlib中制作自定义图例),但它并没有解决我的问题

我附加了一个类似于我的问题的代码

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

mpl.rcParams['legend.fontsize'] = 10

fig = plt.figure()
ax = fig.gca(projection='3d')
theta = np.linspace(-4 * np.pi, 4 * np.pi, 100)
z = np.linspace(-2, 2, 100)
r = z**2 + 1
x = r * np.sin(theta)
y = r * np.cos(theta)
ax.plot(x, y, z, label='parametric curve 1')
ax.scatter(x, y, z, label='parametric curve 1',marker = 'o')
x = r * np.sin(theta + 1)
y = r * np.cos(theta + 1)
ax.plot(x, y, z, label='parametric curve 2')
ax.scatter(x, y, z, label='parametric curve 2',marker = 'o')
ax.legend()

plt.show()

上述代码给出了下面显示的图形Plot 但我希望我的图例只有两个条目。

为什么要分别调用 plotscatter 绘图函数?如果 scatter 中的点与 plot 中的点相同,则在 plot 调用中设置一个 marker,如果它们不是相同的点,则它们可能应该被标记为不同的点,Matplotlib 正在做正确的事情。如果您可能有太多的点需要为它们设置标记,则可以使用 markevery 绘图选项。否则,您需要向我们展示更具代表性的示例。 - Ferdinand van Wyk
当我导入并使用matplotlib库时,我的问题得到了解决.. 我只想知道在编辑图例条目和自定义它们方面我们有多少自由。 - sristisravan
1个回答

11

你是否在使用标准的Matplotlib库来生成这些3D图形?如果是,从文档中的示例开始(http://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html#line-plots),它似乎可以正常工作:

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

mpl.rcParams['legend.fontsize'] = 10

fig = plt.figure()
ax = fig.gca(projection='3d')
theta = np.linspace(-4 * np.pi, 4 * np.pi, 100)
z = np.linspace(-2, 2, 100)
r = z**2 + 1
x = r * np.sin(theta)
y = r * np.cos(theta)
ax.plot(x, y, z, label='parametric curve 1', marker='o')
x = r * np.sin(theta + 1)
y = r * np.cos(theta + 1)
ax.plot(x, y, z, label='parametric curve 2', marker='o')
ax.legend()

plt.show()

在此输入图片描述


它对我的问题有效..但是否可能将图例内容按颜色或相同标签进行分组? - sristisravan
你能展示一些代码或者最小可行示例吗,这样更清楚你想要实现什么? - Ferdinand van Wyk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接