在三维图中设置刻度。

3

我正在进行一些集群分析,并希望使用matplotlib来可视化结果。在大多数情况下,这个过程还算顺利。然而,我在控制坐标轴上的刻度位置方面遇到了困难。也就是说,y轴上的刻度太密集了,我想把它们变得稀疏一些。我尝试使用numpy arrange函数提供刻度范围,但这并没有起作用。

我不知道这是因为我对matplotlib不够熟悉,还是因为这是一个3D绘图问题。无论如何,我已经尝试了Stack上能找到的所有解决方案,但似乎都没有起作用。

我的代码:

import matplotlib.pyplot as plt
import matplotlib.cm as cm

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(data['col_1'], data['col_2'], data['col_3'], c = data.index,  cmap = cm.winter, s=60)
ax.view_init(15, 240)
ax.set_xlabel('X Axis')
ax.set_ylabel('Y Axis')
ax.set_zlabel('Z- Axis')
plt.title('Sample Plot')
plt.show()

Plot has bunched up numbers on y-axis

我的解决方案是按照以下方式提供ticks:

ticks = np.arange(0.3, 0.7, 0.02)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(data['col_1'], data['col_2'], data['col_3'], c = data.index,  cmap = cm.winter, s=60)
ax.view_init(15, 240)
ax.set_xticks(ticks)
ax.set_yticks(ticks)
ax.set_zticks(ticks)
ax.set_xlabel('X Axis')
ax.set_ylabel('Y Axis')
ax.set_zlabel('Z- Axis')
plt.title('Sample Bad Plot')
plt.show()

然而,这只会产生下面的混乱。有什么帮助吗? 这是最终的混乱结果
1个回答

2
问题在于你的x值大约在0.54-0.68范围内,y值在0.34-0.42范围内,z值在0.55-0.63范围内。现在在你的第二段代码中,你定义了ticks = np.arange(0.3, 0.7, 0.02),它创建了从0.30.68的刻度,然后你使用ax.set_xticks(ticks)等将这些值分配给x、y、z轴进行显示。你会得到这个混乱,因为你提供的ticks值超出了实际x、y、z数据点的范围。由于你只关心细化y轴刻度,所以你可以简单地执行以下操作:

ticks = np.arange(0.34, 0.44, 0.02)

然后只需设置y轴的刻度

ax.set_yticks(ticks).

如果你不想手动指定数字0.340.44,你可以找到最大和最小的y值,使用类似ticks = np.arange(min_value, max_value, 0.02)的方法。
由于我无法访问你的原始数据data['col_1']等,所以无法操作你的代码,但上述提示肯定会有帮助。

太好了!这一次解决了问题。非常感谢——真的很感激! - Lodore66

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