You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matplotlib中3D绘图Z轴标签显示不全问题求助

解决Matplotlib 3D图Z轴标签显示不全的问题

在绘制3D K-Means聚类图时,Z轴的长标签(比如Gender (0 = Female, 1 = Male))经常会被遮挡无法完整显示,下面是几个实用的解决办法:

1. 手动调整Z轴标签位置

直接修改标签的位置,让它远离坐标轴:

# 原代码设置Z轴标签的部分
ax.set_zlabel('Gender (0 = Female, 1 = Male)', fontsize=12)
# 添加这行,调整标签的位置,第二个数值越小,标签越向外
ax.zaxis.label.set_position((0.5, -0.15))

2. 调整图表边距

给标签留出足够的显示空间,两种方式可选:

  • 自动调整所有元素间距:
# 在plt.show()前添加
plt.tight_layout()
plt.show()
  • 手动设置边距,按需调整数值:
plt.subplots_adjust(bottom=0.2, left=0.15, right=0.85)
plt.show()

3. 优化标签文本格式

要么让标签换行显示,要么调整旋转角度:

  • 换行显示:
ax.set_zlabel('Gender\n(0 = Female, 1 = Male)', fontsize=12)
  • 旋转标签角度:
ax.set_zlabel('Gender (0 = Female, 1 = Male)', fontsize=12, rotation=90)

4. 简化标签文本

如果不影响理解,直接缩短标签内容:

ax.set_zlabel('Gender (0=F,1=M)', fontsize=12)

修改后的完整代码示例(以调整标签位置为例)

# Plotting data points with cluster colors
ax.scatter(x[:, 1], x[:, 2], x[:, 0], s=50, c=labels.astype(float))

# Plotting cluster centers 
markers = ['o', 'v', '^', '<', '>']
cluster_colors = {i: f'C{i}' for i in range(clusterNum)}
for i in range(clusterNum):
    cluster_mask = labels == i
    ax.scatter(k_means.cluster_centers_[i, 1],
           k_means.cluster_centers_[i, 2],
           k_means.cluster_centers_[i, 0],
           s=200, marker=markers[i],
           c=cluster_colors[i],
           edgecolors='k',
           alpha=0.5)

ax.scatter(x[cluster_mask, 1], 
           x[cluster_mask, 2], 
           x[cluster_mask, 0], 
           s=50, c=cluster_colors[i], 
           marker='o', 
           edgecolors='k', 
           alpha=0.5)

ax.set_xlabel('Age', fontsize=12)
ax.set_ylabel('Income', fontsize=12)
ax.set_zlabel('Gender (0 = Female, 1 = Male)', fontsize=12)
# 添加调整标签位置的代码
ax.zaxis.label.set_position((0.5, -0.15))

plt.title('K-Means Clusters (3D): Age|Income|Gender')

# Create badass legend entries
legend_entries = [plt.scatter([], [], s=50, c=cluster_colors[i], 
                          marker=markers[i], edgecolors='k', 
                          label='Cluster {}'.format(i))
                          for i in range(clusterNum)]

# Again, a legend without a title, is a fokin spaghetti without 
# little meat balls. :)
plt.legend(handles=legend_entries, scatterpoints=1,
       fontsize=10, title='Cluster Centers')

plt.tight_layout()
plt.show()

内容的提问来源于stack exchange,提问作者AmirChil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 21:23:31