Python - 在mplot3D中设置zlim

9
mpl.rcParams['legend.fontsize'] = 10

fig1 = plt.figure()
ax = fig1.gca(projection='3d') 

ax.plot(tab_C[0], tab_C[1], zs=0, zdir='z', label = "Projection de la trajectoire de C", color='k')
ax.plot(tab_M[0], tab_M[1], zs=0, zdir='z', label = "Projection de la trajectoire de M", color='r')

for i in range(0,len(tab_t)):
    ax.plot(tab_C[0][i:i+2], tab_C[1][i:i+2], tab_C[2][i:i+2], color=plt.cm.rainbow(255*i/len(tab_t)))
    ax.plot(tab_M[0][i:i+2], tab_M[1][i:i+2], tab_M[2][i:i+2], color=plt.cm.rainbow(255*i/len(tab_t)))

ax.legend()

ax.set_xlabel('I')
ax.set_ylabel('J')
ax.set_zlabel('K')

m = cm.ScalarMappable(cmap=cm.rainbow)
m.set_array(tab_t)

plt.colorbar(m)

我有一个包含代码的图表:

我的图表

我的问题有: - 我想为颜色条设置标签,但是ScalarMappale中没有set_label()方法 - 我想将zmin设置为0以清晰地看到在平面(0xy)上的投影,但是似乎这里的zmin是0.05,当我执行 ax.set_zlim(bottom=0) 时它返回

Traceback (most recent call last):
  File "code.py", line 117, in <module>
    ax.set_zlim(bottom=0) 
  File "/usr/lib/pymodules/python2.7/mpl_toolkits/mplot3d/axes3d.py", line 515, in set_zlim3d
    lims = self._determine_lims(*args, **kwargs)
  File "/usr/lib/pymodules/python2.7/mpl_toolkits/mplot3d/axes3d.py", line 476, in _determine_lims
    xmin -= 0.05
TypeError: unsupported operand type(s) for -=: 'NoneType' and 'float'

有没有什么办法可以解决我的问题?

1
http://matplotlib.org/examples/api/colorbar_only.html 看起来 colorbar 应该有一个名为 set_label 的方法。 - Sleepyhead
1
使用 set_zlim(min_value, maxvalue) 的正确方法,如果有问题也可以尝试使用 set_zlim3d - Sleepyhead
@Sleepyhead,你可以将你的评论发布为答案... - Saullo G. P. Castro
1个回答

7

正确的调用方式是:set_zlim(min_value, max_value),如果有问题可以尝试使用set_zlim3d

根据文档,colorbar对象有一个方法set_label,请参考这个例子


我尝试了你的set_zlim建议,但是它给出了相同的错误。对于set_zlim3D,它给出了AttributeError:'Axes3DSubplot'对象没有属性'set_zlim3D'。 - pomxipum
当我使用colorbar.ColorbarBase时,会出现错误信息:AttributeError: 'QuadMesh'对象没有属性'do_3d_projection'。 - pomxipum
cb = plt.colorbar(m) cb.set_label('blabla')这对我完全没有问题。 - Sleepyhead
ax.set_zlim(0,40) 也可以正常工作。也许可以尝试在开头添加 from mpl_toolkits.mplot3d import Axes3D - Sleepyhead
'set_ylim()'和'set_xlim'对我有用,但'set_zlim'总是不起作用。我已经导入了Axes3D。 - pomxipum
你使用的matplotlib版本是什么?如果它对你不起作用,那么可能是一个bug,值得联系matplotlib开发人员。 - Sleepyhead

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接