python - 如何使用字典键编写图例?

标签 python python-2.7 matplotlib

我正在尝试可视化以下数据:dictMy = {'apple' : [[0, 1], [0, 2], [3, 2]], 'pear' : [[2, 3], [3, 5], [0, 2]], 'peach' : [[2, 5], [3, 8], [0, 0]]} 这是我的代码:

from matplotlib.pyplot import cm
import matplotlib.pyplot as plt
import numpy as np


dictMy = {'apple' : [[0, 1], [0, 2], [3, 2]], 'pear' : [[2, 3], [3, 5], [0, 2]], 'peach' : [[2, 5], [3, 8], [0, 0]]}

color=iter(cm.rainbow(np.linspace(0,1,len(dictMy))))

for key in dictMy:
    curLabel = key
    c=next(color)
    for item in dictMy[key]:
        x = item[0]
        y = item[1]
        plt.scatter(x,y, c = c)
    plt.legend(str(curLabel))
plt.show()

这是我的输出:

results from code

所以,我真的不明白,为什么它以这种方式显示图例以及如何解决这个问题。我或多或少明白为什么它是所有键中的最后一个,但我不明白为什么它被分成几个字母。请帮忙。

最佳答案

目前您正在为字典中的每个 调用legend 函数。您不需要这样做 - 只需使用字典键标记散点图上的每种类型的点,然后调用 legend 函数。以下将起作用:

from matplotlib.pyplot import cm
import matplotlib.pyplot as plt
import numpy as np


dictMy = {'apple' : [[0, 1], [0, 2], [3, 2]],
          'pear' : [[2, 3], [3, 5], [0, 2]],
          'peach' : [[2, 5], [3, 8], [0, 0]],
         }
color=iter(cm.rainbow(np.linspace(0,1,len(dictMy))))

for key, c in zip(dictMy, color):
    for idx, item in enumerate(dictMy[key]):
        x = item[0]
        y = item[1]
        if idx == 0:
            plt.scatter(x, y, c=c, label=key)
        else:
            plt.scatter(x, y, c=c)

plt.legend()
plt.show()

输出

enter image description here

关于python - 如何使用字典键编写图例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34840788/

相关文章:

Python 2.7 在列表列表中查找最小值、最大值

python - Matplotlib 原始 latex "\epsilon"仅产生 "\varepsilon"

python - 编辑 PyCharm 的 Pep8

python - 我们如何使用 python 将输入文件从存储容器提供给 azure 语音 api

python - 来自 tkinter 应用程序的多线程

python - 当模块名称在变量中时导入模块

python - 将多个数据文件组合成np.arrays,存储在字典中

string - 在 matplotlib 中绘制字符串列表

python - 从散点图拟合数据

python - 修复无效的 xml 字符