Matplotlib:将具有相同颜色和名称

时间:2016-07-21 10:31:34

标签: python matplotlib

如果我用相同的颜色和标签名称重复绘图,标签会多次出现:

from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.gca(projection='3d')

x_labels = [10,20,30]
x = [1,2,3,4]
y = [3,1,5,1]

for label in x_labels:
    x_3d = label*np.ones_like(x)
    ax.plot(x_3d, x, y, color='black', label='GMM')

ax.legend()

enter image description here

是否有可能将它们合二为一,将相同的标签组合成一个?像

这样的东西

enter image description here

我可以通过

制作上面的照片
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.gca(projection='3d')

x_labels = [10,20,30]
x = [1,2,3,4]
y = [3,1,5,1]
legend = False

for label in x_labels:
    x_3d = label*np.ones_like(x)
    ax.plot(x_3d, x, y, color='black', label='GMM')
    if legend == False:
        ax.legend()
        legend = True

但这感觉非常难看,有什么好看的吗?或者我只是以错误的方式制作情节?

1 个答案:

答案 0 :(得分:3)

您应该只显示三组数据之一的标签。可以通过在label = ...的{​​{1}}中添加if / else语句来完成。以下是一个例子:

ax.plot()

这给出了以下图表:

enter image description here

修改

如果您有不同的颜色,那么您可以使用以下内容仅为每种颜色显示一次图例:

from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.gca(projection='3d')

x_labels = [10,20,30]
x = [1,2,3,4]
y = [3,1,5,1]

for label in x_labels:
    x_3d = label*np.ones_like(x)
    ax.plot(x_3d, x, y, color='black', label='GMM' if label == x_labels[0] else '') 
    # above only shows the label for the first plot

ax.legend()

plt.show()

这给出了以下图表:

enter image description here