如何修改Matplotlib水平条形图的起始值为负无穷
让Matplotlib水平条形图从右侧起始的解决方案
你当前的水平条形图默认以0为起点绘制,需要调整为所有条形从图表最右侧开始(无论数值正负),实现类似从右向左延伸的效果。
解决方案
核心操作是反转x轴,通过ax.invert_xaxis()实现。反转后x轴方向颠倒,所有条形会从右侧(原x轴最大值方向)开始绘制,负值向左延伸,正值也从右往左展开,完全匹配你期望的效果。
修改后的完整代码
import matplotlib.pyplot as plt import numpy as np rssi = [] srn = [-25,-30,-5] freq = [] sf = [] messages = ['kitchen', 'garage', 'living room'] # plot plt.style.use('_mpl-gallery') plt.rcdefaults() fig, ax = plt.subplots() y_pos = np.arange(len(messages)) performance = srn ax.barh(y_pos, performance, align='center') ax.set_yticks(y_pos, labels=messages) ax.invert_yaxis() # 保持y轴标签从上到下的阅读顺序 ax.invert_xaxis() # 反转x轴,让条形从右侧起始 ax.set_xlabel('dBm') ax.set_title('SRN') ax.grid(axis='x', color='dimgray', linestyle='dotted', linewidth=0.75) plt.show()
关键修改说明
- 添加
ax.invert_xaxis():直接反转x轴方向,将原x轴的最大值移到左侧、最小值移到右侧,强制所有条形从右侧开始绘制。 - 保留
ax.invert_yaxis():维持y轴标签从上到下的排版逻辑,不干扰条形的起始方向设置。
内容的提问来源于stack exchange,提问作者maximd1
相关产品推荐
相关产品推荐

