首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >难以在matplotlib中只创建一个Line3D对象

难以在matplotlib中只创建一个Line3D对象
EN

Stack Overflow用户
提问于 2016-01-20 08:40:28
回答 1查看 2.2K关注 0票数 3

我是动画3D线对象,类似于这里,这是真正的这里

我只想动一条线,不是很多条线,我不知道这里发生了什么。我认为这与sum()的工作方式有关。

我怎么能只做一个,为什么会失败?

代码语言:javascript
运行
复制
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.colors import cnames

fig = plt.figure()
ax = fig.add_axes([0, 0, 1, 1], projection='3d')
colors = plt.cm.jet([0.3, 0.7])

LINES = sum([ax.plot([],[],[], '-', c=c) for c in colors], [])
line = LINES[0]
line.set_data([], [])                 # THIS WORKS

LINES = [ax.plot([],[],[], '-', c=colors[0])]
line = LINES[0]
line.set_data([], [])                 # THIS FAILS

因此,我可以进一步减少我的问题:

代码语言:javascript
运行
复制
a = [1]
print "type(a[0]): ", type(a[0])   # expect <type 'int'>

b = [ax.plot([],[],[], '-', c=colors[0])]
print "type(b[0]): ", type(b[0])   # expect <class 'mpl_toolkits.mplot3d.art3d.Line3D'>

给出

代码语言:javascript
运行
复制
<type 'int'>
<type 'list'>
EN

Stack Overflow用户

回答已采纳

发布于 2016-01-20 16:21:09

这里的关键点是,ax.plot返回list of Line3D对象(尽管它是一个包含示例中单个成员的列表),而不是Line3D object itself

因此,在您的第一个示例中,LINES是一个Line3D对象的list,在第二个示例中,它是一个listlist,因此,在失败的代码中,line是一个包含单个Line3D对象的list。您尝试在那个set_data对象上调用list,python告诉您list没有这个函数。您可以通过执行line = LINES[0][0]或简单地执行

代码语言:javascript
运行
复制
LINES = ax.plot([],[],[], '-', c=colors[0])[0]

要获取您的这里的示例代码并使其只绘制一行,请更改行:

代码语言:javascript
运行
复制
# set up lines and points
lines = sum([ax.plot([], [], [], '-', c=c)
             for c in colors], [])
pts = sum([ax.plot([], [], [], 'o', c=c)
           for c in colors], [])

阅读

代码语言:javascript
运行
复制
# set up lines and points
lines = ax.plot([], [], [], '-', c=colors[0])
pts = ax.plot([], [], [], 'o', c=colors[0])

sum只是将理解的所有成员附加到一个大列表中的一种方式。上面的变化会从彩色地图上的每一行变化到单行。

票数 3
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34895165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档