Python matplotlib 3D柱状图函数

1 投票
2 回答
1687 浏览
提问于 2025-04-15 14:39

如何在Axes3D中将字符串添加到坐标轴,而不是数字?

我刚开始使用matplotlib这个库。我用Axes3D来绘图,类似于他们网站上给的例子(http://matplotlib.sourceforge.net/examples/mplot3d/bars3d_demo.html)。需要注意的是,必须使用最新版本(matplotlib 0.99.1),否则坐标轴会有点奇怪。这个例子使用了以下代码:

from mpl_toolkits.mplot3d import Axes3D  
import matplotlib.pyplot as plt  
import numpy as np  

fig = plt.figure()  
ax = Axes3D(fig)  
for c, z in zip(['r', 'g', 'b', 'y'], [30, 20, 10, 0]):
    xs = np.arange(20)
    ys = np.random.rand(20)
    ax.bar(xs, ys, zs=z, zdir='y', color=c, alpha=0.8)

ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()

现在说说我的问题,我无法将坐标轴重命名为我想要的名字。我需要在x轴和z轴(深度)上使用字符串名称,而不是数字。我尝试使用这个命令:

ax.set_xticklabels('First staple',(0,0))

我没有收到错误信息,但也没有显示字符串。如果有人能回答这个问题,我会非常高兴!

2 个回答

0

我还获取了轴的数据,处理完后再把它设置回渲染器,结果发现这样做对我来说简单多了 ;) 除此之外,NerdyNick 说的也很对。

2

你其实走在正确的路上。不过,你需要传递一个列表或元组给set_xticklabels(),而不是一个字符串。你可能还想用set_xticks()来调整标签的中心位置。

你可能还会发现get_xmajorticklabels()这个函数很有用。它会返回已经显示的刻度标签。所以你也可以根据它的结果来调整值。

撰写回答