Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在散点图中创建for循环的问题_Python_Matplotlib_Legend - Fatal编程技术网

Python 在散点图中创建for循环的问题

Python 在散点图中创建for循环的问题,python,matplotlib,legend,Python,Matplotlib,Legend,下面是我的散点图代码。我遇到的问题是,图例显示: 一个蓝色的点旁边有一个M,然后在它下面显示一个橙色的点旁边有一个i。那不是我想要的。我想让它显示一个带有Microcar 0的蓝色圆点,然后在它下面显示一个旁边带有Microcar 1的橙色圆点 这一定是出了什么问题: plt.legend('Microcar'+ stri(i)) 我的部分代码,但我不知道是什么 import matplotlib.pyplot as plt import numpy as np horizontal_ex

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

一个蓝色的点旁边有一个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()

您的方法中有两个错误:

每次运行plt.legend'Microcar'+strii行时,它都会覆盖该图例。 legend方法需要一个labels参数,它是一个iterable,并依次将标签的每个成员分配给图形的组件。因为字符串是一个iterable,所以它将字符串的每个字符分配给每个图形组件。 公认的解决方案是可行的,但一种更具可读性的方法是边做边贴标签

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()

您的方法中有两个错误:

每次运行plt.legend'Microcar'+strii行时,它都会覆盖该图例。 legend方法需要一个labels参数,它是一个iterable,并依次将标签的每个成员分配给图形的组件。因为字符串是一个iterable,所以它将字符串的每个字符分配给每个图形组件。 公认的解决方案是可行的,但一种更具可读性的方法是边做边贴标签

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()

在您的例子中,当您将字符串'Microcar'作为参数传递给plt.legend方法时,发生的情况是第一个字符'M'成为第一个图例,第二个字符'i'成为第二个图例

决议

您应该将图例作为字符串列表传递。就像下面的例子

import matplotlib.pyplot as plt
import numpy as np

horizontal_expected =[28.96, 165.03]
vertical_expected = [196.14,-3.34]
legends=[]
for i in list(range(len(vertical_expected))):
    y = vertical_expected[i]
    x = horizontal_expected[i]
    plt.scatter(x,y)
    legends.append(['Microcar' + str(i)])    

plt.legend(legends)
plt.show()
这会给你预期的结果


希望这有帮助……

在您的情况下,当您将字符串“Microcar”作为参数传递给plt.legend方法时,发生的情况是第一个字符“M”成为第一个图例,第二个字符“i”成为第二个图例

决议

您应该将图例作为字符串列表传递。就像下面的例子

import matplotlib.pyplot as plt
import numpy as np

horizontal_expected =[28.96, 165.03]
vertical_expected = [196.14,-3.34]
legends=[]
for i in list(range(len(vertical_expected))):
    y = vertical_expected[i]
    x = horizontal_expected[i]
    plt.scatter(x,y)
    legends.append(['Microcar' + str(i)])    

plt.legend(legends)
plt.show()
这会给你预期的结果

希望这有帮助