如何创建重叠式条形图?实现每日已完成/未接呼叫数据可视化
嘿,我完全懂你想要的那种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
相关产品推荐
相关产品推荐

