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

如何基于布尔列使用matplotlib/seaborn绘制单根堆叠条形图?

解答

结论

完全可以通过matplotlib轻松实现,seaborn作为matplotlib的上层封装库也可以配合完成需求,4万条的数据集规模对matplotlib来说不存在性能压力。

实现思路

  • 你需要的单条多分段堆叠条形图本质是一维序列的颜色映射:把4万条数据按顺序排列,每个数据对应条形上的1个单位长度的分段,根据布尔字段的两个取值分别映射为两种颜色即可。
  • 无需调用传统的堆叠柱状图接口,直接用imshow方法把一维布尔序列转为颜色矩阵渲染是性能最优的方案,哪怕10万条数据也可以秒出图。

可运行示例代码

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.patches import Patch

# 模拟4万条带布尔标识字段的数据集
df = pd.DataFrame({
    "flag": np.random.choice([True, False], size=40000, p=[0.3, 0.7])
})

# 配置画布,第二个参数可调整条形高度
fig, ax = plt.subplots(figsize=(12, 2), dpi=100)

# 将布尔序列转为二维数组适配imshow输入要求
color_data = df["flag"].values.reshape(1, -1)
# 渲染颜色,cmap可替换为自定义配色
ax.imshow(color_data, aspect="auto", cmap="coolwarm", vmin=0, vmax=1)

# 隐藏y轴,只保留x轴表示数据顺序
ax.set_yticks([])
ax.set_xlabel("数据序列位置")

# 添加图例
legend_elements = [
    Patch(facecolor=plt.cm.coolwarm(0), label="布尔值= False"),
    Patch(facecolor=plt.cm.coolwarm(1), label="布尔值= True")
]
ax.legend(handles=legend_elements, bbox_to_anchor=(1.01, 1), loc="upper left")

plt.tight_layout()
plt.show()

可选调整项

  • 如需自定义颜色,可替换cmap参数为matplotlib支持的其他配色方案,也可以自定义颜色映射表。
  • 如需调整条形的高度/宽度,修改figsize的两个参数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 22:48:01