散点图/气泡图
散点图作用:
- 单组数据,可以查看数据分布(不常用,最好使用直方图实现)
- 多组数据,可以插件各数据之间是否存在相关性
坐标系中,每个值用一个点(x轴,y轴确定)表示
# 数据
x = [1,3,5,7,9,11,13,15,17] y = [2,-5,19,3,5,8,12,6,1] plt.scatter(x, y)
<matplotlib.collections.PathCollection at 0xbe16e10>
plt.scatter( [1,3,5,7,9,11,13,15,17], [2,-5,19,3,5,8,12,6,1], color='r', marker='o', linewidth=1, alpha=0.5, # 点大小 # s=1000, s=[50, 100, 150, 200, 250, 300, 350, 400, 450], ) # 第二组散点图 plt.scatter( [10, 12, 16, 18], [5, 10, 12, 15], )
<matplotlib.collections.PathCollection at 0xbc2e390>
案例:数据分析居民年龄/收入和超市销售额的对应关系
1. 背景介绍
数据:
- 顾客年龄
- 顾客年收入
- 顾客年购物金额
需求
- 分析出超市销售额和居民年龄、收入的关系
- 解释关系产生的原因
- 提出建议方案
数据
年龄 收入 销售额 34 350 123 40 450 114 37 169 135 30 189 139 44 183 117 36 80 121 32 166 133 26 120 140 32 75 133 36 40 133
# 年龄 age = [34,40,37,30,44,36,32,26,32,36] # 收入 income = [350,450,169,189,183,80,166,120,75,40] # 销售额 sales = [123,114,135,139,117,121,133,140,133,133]
2. 指标计算步骤,略
3. 数据可视化
用户年龄和销售额的关系
plt.scatter(age, sales)
<matplotlib.collections.PathCollection at 0xbccd630>
用户收入和销售额的关系
plt.scatter(income, sales)
<matplotlib.collections.PathCollection at 0xbd22e80>
将三个维度数据画入一个图表
plt.scatter( age, sales, s=income, alpha=0.5, )
<matplotlib.collections.PathCollection at 0xbdceeb8>
4. 结论:
- 随着用户年龄的增加,销售额逐渐降低
- 随着用户收入的增加,销售额也在降低
原因:
- 老年人的消费水平不高,只买便宜商品
- 高收入用户群体较少在本超市消费
- 本超市的主流用户群体,是发展中的年轻人,销售商品偏年轻化、平民化。
意见建议:
针对超市宣传推广营销活动的建议:
- 营销针对特定用户群体
- 年龄25-37岁之间
- 年收入20万元以下
- 应针对上述发展中的年轻人进行宣传推广活动
条形图/柱状图
- 条形图(横向)
- 柱状图(纵向)
条形图和柱状图用来比较各独立类别下的单独数据的大小比较
x = [1,2,3,4,5] y = [3,6,1,8,2]
<BarContainer object of 5 artists>
plt.bar( x, y, width=0.3, # 柱子粗细 color='r', alpha=0.3, ) # 坐标值和坐标标注 自定义 # plt.xticks([1,3,5,6,7]) plt.xticks([1,2,3,4,5], ['a', 'b', 'c', 'd', 'e']) plt.yticks([3,6,1,8,2], ['A', 'B', 'C', 'D', 'E']) plt.show() # 直接显示图像,其他编辑器绘图最后必须写这行代码否则没有图
plt.bar( x, y, width=0.3, # 柱子粗细 color='r', alpha=0.3, ) # 坐标值和坐标标注 自定义 # plt.xticks([1,3,5,6,7]) plt.xticks([1,2,3,4,5], ['a', 'b', 'c', 'd', 'e'],rotation = 90)#rotation旋转 plt.yticks([3,6,1,8,2], ['A', 'B', 'C', 'D', 'E']) plt.show() # 直接显示图像,其他编辑器绘图最后必须写这行代码否则没有图
image.png
条形图
- 条形图粗细属性:height
- 条形图的x、y坐标翻转
plt.barh(x, y, height=0.5)
案例:某班级男生和女生各科成绩平均分数据可视化
学科 | 男生 | 女生 |
语文 | 85.5 | 94 |
数学 | 91 | 82 |
英语 | 72 | 89.5 |
物理 | 59 | 62 |
化学 | 66 | 49 |
# 男生平均分,语文/数学/英语/物理/化学 boy = [85.5,91,72,59,66] # 女生平均分 girl = [94,82,89.5,62,49] # 男生成绩 # x轴,各个学科 course = [1,2,3,4,5] plt.bar( course, boy, width=0.3, color='g', alpha=0.3, ) # 女生成绩 course2 = [1.3, 2.3, 3.3, 4.3, 5.3] plt.bar( course2, girl, width=0.3, color='r', alpha=0.3, ) # 坐标轴和坐标轴标注 plt.xticks([1.15, 2.15, 3.15, 4.15, 5.15], ['Chi','Math','Eng','Phy','Che']) # 了解,将数据标注在柱子上 # plt.text(3, 50, 'abcde') for i,j in zip(course,boy): plt.text( i, # x轴,course学科位置 j, # y轴,boy分数 '%.1f' % j, # 数据转为一位小数 ha='center', # 水平对齐 va='bottom', # 垂直对齐 alpha = 0.5, ) for i,j in zip(course2,girl): plt.text( i, j, '%.1f' % j, ha='center', va='bottom', alpha = 0.5, ) plt.grid(linewidth=0.1) plt.show()