一、条形图的应用场景
1. 数据比较
-
适用场景:对比不同类别、组别或时间点的数值差异。
-
示例:
-
不同产品的销售额对比;
-
各城市人口数量排名;
-
部门间的年度预算分配。
-
2. 分类数据分布
-
适用场景:展示分类数据的频数或比例。
-
示例:
-
不同年龄段用户的占比;
-
客户满意度调查中各评分等级(满意、一般、不满意)的分布。
-
3. 时间趋势(少量时间点)
-
适用场景:当时间点较少时,用条形图展示随时间变化的趋势。
-
对比:时间点较多时更适合折线图。
-
示例:
-
某公司近5年的年利润变化;
-
月度新增用户数对比(全年12个月可能更适合折线图)。
-
4. 部分与整体关系(堆叠条形图)
-
适用场景:既展示类别总体的对比,又显示各子类别的构成。
-
示例:
-
不同地区的销售额中,各产品线的贡献比例;
-
某国家能源结构中化石能源、核能、可再生能源的占比。
-
5. 排名或排序
-
适用场景:直观显示数据从高到低(或相反)的排序。
-
技巧:将数据按大小排序后绘制条形图。
-
示例:
-
全球十大人口最多国家排名;
-
学生考试成绩从高到低排列。
-
6. 地理或区域对比
-
适用场景:比较不同地区的数据差异。
-
示例:
-
各省份GDP对比;
-
各国家碳排放量对比。
-
7. 市场或竞品分析
-
适用场景:分析不同品牌、产品在市场份额、用户评价等方面的表现。
-
示例:
-
手机品牌市场份额对比;
-
竞品功能评分对比。
-
8. 资源分配或成本分析
-
适用场景:展示资源在不同项目或部门中的分配情况。
-
示例:
-
公司各部门的预算分配;
-
家庭开支中各项支出占比。
-
9. 调查结果可视化
-
适用场景:呈现问卷调查、投票结果等。
-
示例:
-
用户偏好的支付方式统计;
-
员工对办公环境的满意度调查结果。
-
10. 目标与实际对比
-
适用场景:对比计划目标与实际完成情况。
-
示例:
-
销售团队目标销售额与实际达成额的对比;
-
项目进度里程碑的完成情况。
-
选择条形图的优势
-
直观性:通过条形的长短快速识别数据大小。
-
灵活性:支持水平(柱状图)或垂直(条形图)布局,适应不同场景。
-
多维度扩展:可通过堆叠、分组、颜色区分展示更复杂的数据关系。
二、基础用法
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.style as ms
# 设置主题风格
# classic、fast、petroff10、seaborn-v0_8-colorblind
ms.use('seaborn-v0_8-colorblind')
plt.figure(num='条形图', figsize=(12, 8), facecolor='w')
plt.rcParams['font.sans-serif'] = 'KaiTi'
plt.rcParams['axes.unicode_minus'] = False
y = np.arange(5)
x1 = np.array([10,8,7,11,13])
x2 = np.array([28,26,20,25,28])
x3 = np.array([20,18,21,18,25])
bar_height = 0.3
plt.yticks(y,['1月','2月','3月','4月','5月'])
# 数据显示
for a,b in zip(x1,y):
plt.text(a+0.3,b,'%d' %a,va='center',color='k')
plt.barh(y,x1,height=bar_height)
for a,b in zip(x2,y+bar_height):
plt.text(a+0.3,b,'%d' %a,va='center',color='k')
plt.barh(y+bar_height,x2,height=bar_height)
for a,b in zip(x3,y+2*bar_height):
plt.text(a+0.3,b,'%d' %a,va='center',color='k')
plt.barh(y+2*bar_height,x3,height=bar_height)
plt.show()
三、不同产品的销售额对比
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import matplotlib.style as ms
# 设置主题风格
# classic、fast、petroff10、seaborn-v0_8-colorblind
ms.use('seaborn-v0_8-colorblind')
plt.figure(num='条形图', figsize=(12, 8), facecolor='w')
plt.rcParams['font.sans-serif'] = 'KaiTi'
plt.rcParams['axes.unicode_minus'] = False
df = pd.read_excel('不同产品各季度的销售额.xlsx')
y = np.arange(len(df['季度']))
x = []
x.append(df['产品A'])
x.append(df['产品B'])
x.append(df['产品C'])
bar_height = 0.2
plt.title('不同产品各季度的销售额条形图', fontfamily='SimHei', fontsize=20, color='r')
# rotation:角度
plt.yticks(y, df['季度'], rotation=-0)
plt.ylabel('季度', fontsize=16)
plt.xlabel('销售额(万元)', fontsize=16)
for i in range(len(x)):
plt.barh(y + i * bar_height, x[i], height=bar_height, align='edge')
for a, b in zip(x[i], y + i * bar_height):
plt.text(a+bar_height, b, '%d' % a, va='bottom')
plt.legend(['产品A', '产品B', '产品C', ], shadow=True, fancybox=True)
plt.show()