首页 > 解决方案 > 在散点图中创建 for 循环的问题

问题描述

下面是我的散点图代码。我遇到的问题是图例显示:

一个蓝点旁边有一个 M,然后在它下面显示一个橙色点,旁边有一个 i。那不是我想要的。我希望它显示一个带有 Microcar 0 的蓝点,然后在其下方显示一个带有 Microcar 1 的橙色点。

一定有问题:

plt.legend('Microcar'+ stri(i)) 

我的代码的一部分,但我不知道是什么?

import matplotlib.pyplot as plt
import numpy as np

horizontal_expected =[28.96, 165.03]
vertical_expected = [196.14,-3.34]

for i in list(range(len(vertical_expected))):
    y = vertical_expected[i]
    x = horizontal_expected[i]
    plt.scatter(x,y)
    plt.legend('Microcar' + str(i))


plt.show()

标签: pythonmatplotliblegend

解决方案


你的方法有两个错误:

  1. 每次plt.legend('Microcar'+ stri(i))运行时都会覆盖图例。
  2. plt.legend方法需要一个labels可迭代的参数,并将 的每个成员labels依次分配给图的组件。因为字符串是可迭代的,它会将字符串的每个字符分配给每个图形组件。

公认的解决方案有效,但更易读的方法是随时标记。

import matplotlib.pyplot as plt
import numpy as np

horizontal_expected =[28.96, 165.03]
vertical_expected = [196.14,-3.34]

for i, (x, y) in enumerate(zip(horizontal_expected, vertical_expected)):
    plt.scatter(x, y, label='Microcar ' + str(i))

plt.legend()

plt.show()

推荐阅读