matplotlib не печатает при передаче именованных аргументов - PullRequest
0 голосов
/ 11 мая 2018

Может кто-нибудь объяснить это поведение?

import matplotlib.pyplot as plt
plt.plot(x=[0.05, 0.1, 0.15], y=[102, 211, 393])
plt.show()

No output!

import matplotlib.pyplot as plt
plt.plot([0.05, 0.1, 0.15], [102, 211, 393])
plt.show()

With output!

То есть, без указания x= и y= явно, pyplot работает нормально.Однако это отличается от поведения в документации .Ну, документация явно не использует x= или y=, но она дает подпись plot как plot(x, y).Следовательно, именованные аргументы должны быть разрешены и давать одинаковый результат, верно?

Ответы [ 3 ]

0 голосов
/ 11 мая 2018

Нигде в документации не показано использование аргументов ключевых слов. Если вы будете следовать исходному коду , вы увидите, что аргументы данных графика обрабатываются _process_plot_var_args(object) довольно сложным образом. Следовательно, наблюдаемое вами поведение не является ошибкой.

Вместо этого, довольно интересно, этот дизайн позволяет вам делать следующее:

plt.plot(x1, y1, "r--", x2, y2, "bo")
0 голосов
/ 11 мая 2018

Я думаю, что путаница происходит из-за разницы в подписи.Это проблема с питоном.

Рассмотрим

def func1(x,y):
    print(x,y)

def func2(*args):
    print(args)

Вы можете вызывать каждый из них с позиционными аргументами.

func1(1,2)
func2(1,2)

Вы также можете вызвать первую функцию с именемarguments.

func1(x=1, y=2)

Однако вы не можете вызвать вторую функцию с именованными аргументами, поскольку x и y не определены.

func2(x=1, y=2)

приводит к ошибке.

Как видно из документации plot, он использует второй способ определения функции,

matplotlib.pyplot.plot(*args, **kwargs)

Я думаю, что документация matplotlib должна предполагать некоторое базовое понимание Python, но если естьэто то, что можно сделать, чтобы уточнить это, не стесняйтесь обратиться с предложением о том, что улучшить.

0 голосов
/ 11 мая 2018

Если вы посмотрите на исходный код для сюжета, это выглядит примерно так:

def plot(*args, **kwargs):
...

В документации ясно, что массивы x, y являются обязательными, но если вы передадите x = [], y = [], функция plot распознает их как части kwargs, а не как args. Plot ожидает два массива в качестве прямых аргументов, без которых он возвращает пустой набор объектов. Эти ссылки расскажут вам больше о них:

https://pythontips.com/2013/08/04/args-and-kwargs-in-python-explained/ https://www.geeksforgeeks.org/args-kwargs-python/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...