Просто чтобы расширить то, что @Yann уже сказал:
Чтобы понять, почему это происходит, вам нужно немного больше понять структуру matplotlib.Чтобы разрешить "matlab-isms", такие как plt.setp
, и поддерживать совместимость со старыми версиями python, matplotlib избегает свойств и в значительной степени зависит от методов получения и установки.(plot
на самом деле является одним из самых сложных случаев, просто из-за всех сумасшедших форм вызова, которые он поддерживает.)
Вы можете привести веские аргументы в пользу того, что это устаревший, непитонный дизайн, но этокроме точки.
Что на самом деле происходит (для простейшего случая plot(x, y, other=stuff)
), когда вы вызываете plot
, так это то, что новый объект matplotlib.line.Line2D
создается из первых двух аргументов, а затем matplotlib.line.Line2D.update(kwargs)
называется.
update
в основном это так:
for key, value in kwargs.iteritems():
func = getattr(self, 'set_'+key)
func(value)
Я слишком упрощен, но это основная идея.
Также принят список ключевых слов аргументов:в основном автоматически генерируется из всего, что имеет set_*
.Поскольку Line2D
имеет set_xdata
и set_ydata
методы, они отображаются в списке аргументов ключевого слова.
Дело в том, что аргументы ключевого слова фактически никогда не используются до тех пор, пока не будет завершена большая часть инициализации * 1027.*, и если вы не укажете никаких аргументов, plot
не будет инициализировать Line2D
.
Вы можете считать это ошибкой, но я сомневаюсь, что это будет исправлено.Я не думаю, что xdata
и ydata
когда-либо предназначались для использования в качестве аргументов ключевых слов.
set_xdata
и set_ydata
позволяют быстро обновлять экземпляр Line2D
вместо создания нового (для анимации и т. Д.).Просто они могут быть разрешены в качестве аргументов ключевых слов из-за способа установки matplotlib.