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

如何创建重叠式条形图?实现每日已完成/未接呼叫数据可视化

嘿,我完全懂你想要的那种Tableau风格重叠堆叠条形图效果——每个日期的条形里,绿色块代表已完成对话,剩下的部分是未接呼叫,整体高度是两者的总和对吧?我来给你两种实现方案,看哪种更贴合你的需求:

方案1:标准堆叠条形图(和Tableau堆叠效果完全一致)

这种方案里,未接呼叫作为底部条形,已完成对话叠在顶部,总高度就是当日的呼叫总数,绿色部分清晰展示已完成的数量:

import pandas as pd
import matplotlib.pyplot as plt

# 先准备你的数据(这里用模拟数据示例,替换成你的真实数据即可)
data = {
    '日期': ['2018-04-01', '2018-04-02', '2018-04-03'],
    '已完成对话': [1, 3, 2],
    '未接呼叫': [4, 2, 5]
}
df = pd.DataFrame(data)

# 设置画布大小
plt.figure(figsize=(10, 6))

# 第一步:绘制未接呼叫的底部条形
plt.bar(df['日期'], df['未接呼叫'], label='未接呼叫', color='#888888')

# 第二步:绘制已完成对话的顶部条形,指定bottom参数叠在未接呼叫之上
plt.bar(df['日期'], df['已完成对话'], bottom=df['未接呼叫'], label='已完成对话', color='#00a862')

# 添加图表元素
plt.title('每日呼叫统计(已完成 vs 未接)', fontsize=14)
plt.xlabel('日期', fontsize=12)
plt.ylabel('呼叫数量', fontsize=12)
plt.legend(fontsize=10)

# 旋转x轴日期标签,避免拥挤
plt.xticks(rotation=45)

# 自动调整布局,防止标签被截断
plt.tight_layout()
plt.show()

方案2:重叠覆盖式条形图(更贴合“重叠”的描述)

如果你的需求是让已完成对话的条形直接覆盖在总呼叫数(未接+已完成)的条形上,视觉上呈现“绿色块标注已完成部分”的效果,可以用这种方式:

import pandas as pd
import matplotlib.pyplot as plt

# 同样用模拟数据,替换为你的真实数据
data = {
    '日期': ['2018-04-01', '2018-04-02', '2018-04-03'],
    '已完成对话': [1, 3, 2],
    '未接呼叫': [4, 2, 5]
}
df = pd.DataFrame(data)
# 计算当日总呼叫数
df['总呼叫数'] = df['已完成对话'] + df['未接呼叫']

plt.figure(figsize=(10, 6))

# 先画总呼叫数的背景条形(灰色)
plt.bar(df['日期'], df['总呼叫数'], color='#888888', alpha=0.7, label='未接呼叫')

# 再画已完成对话的条形,叠在背景之上(绿色)
plt.bar(df['日期'], df['已完成对话'], color='#00a862', label='已完成对话')

# 添加图表元素
plt.title('每日呼叫统计(已完成重叠展示)', fontsize=14)
plt.xlabel('日期', fontsize=12)
plt.ylabel('呼叫数量', fontsize=12)
plt.legend(fontsize=10)

plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

这两种方案都能实现你要的效果,你可以根据自己的视觉偏好选择。如果你的现有代码有问题,也可以把代码贴出来,我帮你排查调整~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:04:56