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

Matplotlib绘制双列横向柱状图异常及双x轴实现问题求助

Matplotlib双横向柱状图问题解答

1. 第二列数据不显示的原因

两组数据量级差距过大:n列数值在百万~千万级别,而m列数值仅为数千,共用同一个X轴时,m列的柱子长度相对于n列几乎可以忽略,视觉上就像完全被隐藏了。

2. 双X轴分别绑定两组数据的实现方法

可以通过twiny()方法生成第二个顶部X轴,分别绑定两组数据,各自独立设置数值范围:

  • 第一组n列数据绑定顶部X轴
  • 第二组m列数据绑定底部X轴
    两套坐标轴独立计算刻度,不会出现单轴下数值差距过大导致的显示问题。

3. Y轴国家标签偏移的原因

原代码存在两处配置错误导致偏移:

  • yticks设置为ind + width,等于把标签对齐到了第二根柱子的侧边,而不是两根柱子的中间位置
  • ylim的起始值设置为2*width - 1得到负数,压缩了Y轴的显示范围,导致上下标签位置异常

修正后完整可运行代码

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.DataFrame(dict(graph=["Indian","Egyptian","Emirati","Philippino","Syrian","Pakistani","Jordanian",
          "British","Lebanese","American","Chinese","Ukrainian","Canadian","Russian",
          "French","Saudi","Sudanese","Moroccan","Nigerian","Palestinian","German","Iranian",
          "Italian","Turkish","Tunisian"],
                           n=[33060621,28185470,25327222,14033365,13895316,13335555,13067230,9065737,8871022,3914119,3875486,
         3505868,3421358,3407623,3067701,2940321,2824929,2620922,2510789,2439167,1874219,1800495,1852571,1415189,1657462], 
                           m=[13504,13762,9671,4568,4995,8016,6808,5559,5456,4137,2802,1011,2386,1806,4408,2002,1141,1530,916,992,1933,1651,
          1628,1469,839])) 

ind = np.arange(len(df))
width = 0.4

fig, ax1 = plt.subplots(figsize=(15,20))
# 底部X轴绘制m列
ax1.barh(ind, df.m, width, color='green', label='M')
ax1.set_xlabel('M 数值范围', color='green')
ax1.tick_params(axis='x', labelcolor='green')

# 生成顶部X轴绘制n列
ax2 = ax1.twiny()
ax2.barh(ind + width, df.n, width, color='red', label='N')
ax2.set_xlabel('N 数值范围', color='red')
ax2.tick_params(axis='x', labelcolor='red')

# 修正Y轴刻度和标签,对齐到两根柱子中间
ax1.set(yticks=ind + width/2, yticklabels=df.graph, ylim=[-width, len(df)])

# 合并两个轴的图例
lines1, labels1 = ax1.get_legend_handles_labels()
lines2, labels2 = ax2.get_legend_handles_labels()
ax1.legend(lines1 + lines2, labels1 + labels2, loc='upper right')

plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:48:02