由于SyntaxError,在3d wirefram plot(matplotlib)中交换轴:只有命名参数可以跟*表达式

时间:2016-11-21 20:15:57

标签: python matplotlib plot python-3.4 argument-unpacking

我在Python 3.4.3上无法升级系统。 我的问题是我想使用matplotlibmpl_toolkits.mplot3d

生成三维线框图
ax.plot_wireframe(*a,b, rstride=1, cstride=2)
>> SyntaxError: only named arguments may follow *expression

this question我得到的是,之前的Python 3.5一个已加星标的表达式只允许作为exprlist中的最后一项。

ax.plot_wireframe(b,*a, rstride=1, cstride=2)有效,但当然 - 这会产生扭曲轴的情节。

我的问题: 是否有可能从wirefram图中交换轴(e.q。ax.plot_wireframe(Z,X,Y)而不是(X,Y,Z),或者解压缩问题还有另一种解决方法吗?

进一步详情:

a = np.meshgrid(np.arange(ys.shape[0]),xs)
b = ys.T

print(ys.shape)
>>(448, 33)
print(ys.shape[0])
>>488
print(b.shape)
>>(33,448)
print(xs.shape)
>>(33,)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~ 我能够通过给Python想要的东西,即命名参数来规避问题。 所以这一行现在写着:

ax.plot_wireframe(*a,Z=b)

1 个答案:

答案 0 :(得分:1)

使用itertools.chain ba的关系怎么样,并将它们打包成一个部分:

from itertools import chain

ax.plot_wireframe(*chain(a, (b,)), rstride=1, cstride=2)

如果a是列表或元组,您当然可以在将b放入 type a的容器中后立即使用添加。

演示:

>>> a = [1,2,3]
>>> b = 4
>>> print(*a, b)
  File "<stdin>", line 1
SyntaxError: only named arguments may follow *expression
>>> print(b, *a)
4 1 2 3
>>> print(*chain(a, (b,)))
1 2 3 4