我正在做一些聚类分析,并希望使用matplotlib可视化结果。在大多数情况下,这是工作OK。然而,我正在努力控制刻度在轴上的位置。也就是说,y轴上的刻度太拥挤了,我想把它们去掉。我尝试使用numpy arrow函数为刻度提供一个范围,但这不起作用。
我不知道这是因为我对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()
我的解决方案是提供刻度如下:
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条答案
按热度按时间y3bcpkx11#
问题是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.3
到0.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.34
和0.44
的数字,你可以找到最大和最小的y
值,然后使用类似ticks = np.arange(min_value, max_value, 0.02)
的值。因为我没有访问你的原始数据
data['col_1']
等等,我不能玩你的代码,但上面的提示肯定会有帮助。