直线,=轴图(x,y)

2024-05-16 12:16:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道“行”之后的“”的含义

line, = ax.plot(rand(100), rand(100), 'o', picker=line_picker)

这似乎对代码很重要。 我的代码被压碎了。 错误为“AttributeError:“list”对象没有属性“get_xdata”

from matplotlib import pyplot as plt
import numpy as np

class PointBuilder:
    def __init__(self, line):
        self.line = line
        self.xs = list(line.get_xdata())
        self.ys = list(line.get_ydata())
        self.cid = line.figure.canvas.mpl_connect('pick_event', self)

    def __call__(self, event):
        print('click', event)
        ind = event.ind[0]
        self.xs.remove(self.xs[ind])
        self.ys.remove(self.ys[ind])
        self.line.set_data(self.xs, self.ys)
        self.line.figure.canvas.draw()

fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_title('click to build line segments')
line = ax.plot(demag_data["X corr"], demag_data['Y corr']*-1, 'o',color='tab:blue', picker=5)
linebuilder = PointBuilder(line)

plt.show()

Tags: selfeventdatagetplotlinepltax
2条回答

这可能是确保函数返回一个不可iterable对象或只返回一个元素的可iterable对象的特性。以下是一个例子:

def func():
   return 1, 2, 3

a, b, c = func()

这个很好用。现在考虑下面的例子:

a = func()

这个fork也很好,但是a现在是一个收集所有输出的元组。print(a)的输出是(1, 2, 3)。让我们加上逗号:

a, = func()

这不起作用,它给出了一个错误:

ValueError: too many values to unpack (expected 1)

但当我们改变函数,使其输出单个对象时

def func():
   return 1

def func():
   return [1]

它又起作用了

此语法的附加功能(在这里很重要)如下所示:如果函数输出一个只有一个元素的列表,则从列表中获取该元素并将其输出。例如:

def func():
   return [1]

a = func()
print(a)

输出为[1]。对于逗号的情况:

a, = func()
print(a)

输出为1

因此,作者不希望此函数输出包含多个元素的列表,他们希望输出这一个元素本身,而不是作为列表的元素

简介:解包列表:

lst = [1, 2, 3]
first, second, third = lst    # first == 1, second == 2, third == 3; "unpacking" a list

lst = [1, 2]                  
first, second = lst           # first == 1, second == 2

list = [1]
first, = lst                  # first == 1

first = lst                   # first == [1]   # not the same as previous

ax.plot()返回表示打印数据的Line2D对象的列表

那么,在这个命令之后,

line = ax.plot(...)

line变量中有一个列表(只包含一个元素),但您需要的是这个元素,而不是列表

您可以在这个命令之后执行line = line[0],但是line, = ax.plot(...)更好(更像Pythonic)

相关问题 更多 >