Python 图例中的标签顺序错误

Python 图例中的标签顺序错误,python,matplotlib,plot,legend,Python,Matplotlib,Plot,Legend,我对图例中标签的顺序有一个奇怪的问题。我正在做一个散点图,在散点图中,我对数据列表进行了预排序,以便在顶部绘制较小的点(实现这一点的方法是在这个问题中向我提出的:) 我遇到的问题是,图例中标签的顺序显然是分散的。这里有一个MWE来说明我的意思: import matplotlib.pyplot as plt import numpy as np def rand_data(): return np.random.uniform(low=0., high=1., size=(100,))

我对图例中标签的顺序有一个奇怪的问题。我正在做一个散点图,在散点图中,我对数据列表进行了预排序,以便在顶部绘制较小的点(实现这一点的方法是在这个问题中向我提出的:)

我遇到的问题是,图例中标签的顺序显然是分散的。这里有一个MWE来说明我的意思:

import matplotlib.pyplot as plt
import numpy as np

def rand_data():
    return np.random.uniform(low=0., high=1., size=(100,))

# Generate data.
x, y, x2, x3 = [rand_data() for i in range(4)]
# This data defines the markes and labels used.
x1 = np.random.random_integers(7, 9, size=(100,))

# Order all lists so smaller points are on top.
order = np.argsort(-np.array(x2))
# Order x and y.
x_o, y_o = np.take(x, order), np.take(y, order)
# Order list related to markers and labels.
z1 = np.take(x1, order)
# Order list related to sizes.
z2 = np.take(x2, order)
# Order list related to colors.
z3 = np.take(x3, order)

plt.figure()
cm = plt.cm.get_cmap('RdYlBu')

# Scatter plot where each value in z1 has a different marker and label
# assigned.
mrk = {7: ('o', '7'), 8: ('s', '8'), 9: ('D', '9')}
for key, value in mrk.items():

    s1 = (z1 == key)
    plt.scatter(x_o[s1], y_o[s1], marker=value[0], label=value[1],
        s=z2[s1] * 100., c=z3[s1], cmap=cm, lw=0.2)

# Plot colorbar
plt.colorbar()

# Plot legend.
plt.legend(loc="lower left", markerscale=0.7, scatterpoints=1, fontsize=10)

plt.show()
生成的图像如下所示:

如图所示,图例显示了标签,如
8,9,7
,此时它应该是
7,8,9

奇怪的是,如果我改为设置定义
x1
列表的行和保存标记和标签的
mrk
字典,如下所示:

x1 = np.random.random_integers(1, 3, size=(100,))
mrk = {1: ('o', '1'), 2: ('s', '2'), 3: ('D', '3')}
结果图例的顺序为
1,2,3

那么,这里发生了什么?我如何强制图例排序,无论我在
x1
中使用什么数字来定义标记和标签?

这是因为dict方法返回未排序的列表。但你可以做到:

for key, value in sorted(mrk.items()):
    <..>
对于键,排序中的值(mrk.items()):

它将按所需顺序获得
(键、值)
元组对:
789

这既简单又有效。非常感谢您!