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

Python绘制Bidirectional Bar Plot如何清除背景色并添加黑色坐标轴?

问题原因

  • plt.update_xaxes 属于Plotly库的API,Matplotlib中无对应方法,因此无法生效
  • axhline(0) 绘制的是y轴数值为0的水平线,你的y轴为分类变量,0对应第一个分类的位置,因此会出现在最下方条形的中间位置

解决步骤

你可以按照以下修改逐一调整代码即可满足需求:

  1. 全局设置纯白背景、关闭网格
    创建画布时将facecolor设为white,同时对两个子图调用grid(False)关闭网格线
  2. 删除"Figure 1"窗口标题
    添加fig.canvas.manager.set_window_title('')清空默认窗口标题
  3. 正确设置黑色坐标轴线条
    直接修改子图的spines(边框)属性,设置所有边框颜色为黑色、宽度为2即可
  4. 修正y轴刻度颜色
    原代码中axes[0].tick_params(axis='y', colors='white')会将y轴刻度设为白色,需要删除该行或改为黑色

修改后完整代码

import matplotlib.pyplot as plt
import matplotlib as mpl
import pandas as pd
import seaborn as sns
# 提前构造示例数据(原代码中average_length和num_entries未定义,这里给示例值方便运行)
average_length = [120,90,70,50,30,20,10]
num_entries = [10,30,40,60,80,90,110]

class_list = ['test1','test2','test3','test4','test5','test6','test7']
data = pd.DataFrame(data=zip(class_list,average_length,num_entries),columns=['Class','Lens','Nums'])
data.set_index('Class', inplace=True)

font_color = '#525252'
hfont = {'fontname':'Calibri'}
facecolor = 'white' # 改为纯白色背景
color_red = '#fd625e'
color_blue = '#01b8aa'
index = data.index
column0 = data['Lens']
column1 = data['Nums']
title0 = "Title 1"
title1 = 'Title 2'

fig, axes = plt.subplots(figsize=(10,5), facecolor=facecolor, ncols=2,sharey=True)
fig.tight_layout()

# 清空默认Figure 1窗口标题
fig.canvas.manager.set_window_title('')

axes[0].barh(index, column0, align='center', color=color_red, zorder=10)
axes[0].set_title(title0, fontsize=18, pad=15, color=color_red, **hfont)
axes[1].barh(index, column1, align='center', color=color_blue, zorder=10)
axes[1].set_title(title1, fontsize=18, pad=15, color=color_blue, **hfont)


# 如果有正数需要反转左图x轴
axes[0].invert_xaxis() 

# 数据从高到低展示
plt.gca().invert_yaxis()

axes[0].set(yticks=data.index, yticklabels=data.index)
axes[0].yaxis.tick_left()

axes[1].set_xticks([0,20,40,60,80,100,120]) # 先显式设置刻度再改标签,避免版本警告
axes[1].set_xticklabels(['0','20', '40', '60', '80', '100', '120'])

# ========== 新增修改开始 ==========
for ax in axes:
    # 子图背景设为纯白
    ax.set_facecolor('white')
    # 关闭网格
    ax.grid(False)
    # 设置所有坐标轴边框为黑色,宽度2
    for spine in ax.spines.values():
        spine.set_color('black')
        spine.set_linewidth(2)
# ========== 新增修改结束 ==========

for label in (axes[0].get_xticklabels() + axes[0].get_yticklabels()):
    label.set(fontsize=13, color=font_color, **hfont)
for label in (axes[1].get_xticklabels() + axes[1].get_yticklabels()):
    label.set(fontsize=13, color=font_color, **hfont)
    
plt.subplots_adjust(wspace=0, top=0.85, bottom=0.1, left=0.18, right=0.95)
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:45:06