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

如何在Matplotlib图表中隐藏0值(不删除数据列)

解决Matplotlib中隐藏0值条形的问题

你的代码仍显示0值,大概率是浮点数精度问题或过滤条件不够严谨导致的。以下是两种可行的解决方案:

方案一:严谨过滤0值(推荐)

用> 0替代!= 0作为过滤条件,既能避免浮点数计算误差(比如极小的非零值如1e-16被误判为非0),又能保留原数据中的0值:

percentage_ks = (km_50['Athlete club'].value_counts() / len(km_50)) * 100
top_12 = percentage_ks.nlargest(12)

# 严谨过滤0值,避免浮点数精度问题
top_12_new = top_12[top_12 > 0]

plt.figure(figsize=(10, 6))  
sns.barplot(x=top_12_new.index, y=top_12_new.values)

for index, value in enumerate(top_12_new):
    plt.text(index, value + 0.5, f'{value:.2f}%', ha='center')
    
plt.xlabel('Scientific Name')
plt.ylabel('Percentage')
plt.title('Percentage Distribution of Top 15 Scientific Names')
plt.xticks(rotation=45, ha='right')  

plt.tight_layout()
plt.show()

方案二:保留原数据,仅绘图时隐藏0值

如果需要保留top_12中的0值(后续其他逻辑要用到),可以不创建新的Series,直接在绘图和文本标注环节跳过0值:

percentage_ks = (km_50['Athlete club'].value_counts() / len(km_50)) * 100
top_12 = percentage_ks.nlargest(12)

plt.figure(figsize=(10, 6))  
# 用where将0值转为NaN,Seaborn会自动隐藏对应条形
sns.barplot(x=top_12.index, y=top_12.where(top_12 > 0).values)

for index, value in enumerate(top_12):
    # 仅给非0值添加文本标签
    if value > 0:
        plt.text(index, value + 0.5, f'{value:.2f}%', ha='center')
    
plt.xlabel('Scientific Name')
plt.ylabel('Percentage')
plt.title('Percentage Distribution of Top 15 Scientific Names')
plt.xticks(rotation=45, ha='right')  

plt.tight_layout()
plt.show()

额外提示

你的图表标题标注的是"Top 15",但代码中取的是前12个类别,若为笔误可自行调整nlargest()的参数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 08:16:01