Matplotlib绘图_02
- 1.散点图
- 2.条形图
- 2.1 竖条形图
- 2.2 分组条形图
- 2.3 堆叠条形图
- 2.4 水平条形图
- 总结
1.散点图
散点图介绍:散点图用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式。
散点图特点:判断变量之间是否存在数量关联趋势,表示离群点(分布规律)。
- plt.scatter(x,y):使用默认的形状颜色等绘制散点图
举个例子:假设通过爬虫你获取到了长沙2019年4,10月份每天白天的最高气温(分别位于列表a,b),那么此时如何寻找出气温和随时间变化的某种规律
a = [11,17,16,11,12,11,12,13,10,14,8,13,12,15,14,17,18,21,16,17,30,14,15,15,15,19,21,22,22,22,23]
b = [26,26,28,19,21,17,16,19,18,20,20,19,22,23,17,20,21,20,22,15,11,15,5,13,15,10,11,13,12,13,6]
from matplotlib import pyplot as plt
import matplotlib
font = {
'family':'SimHei',
'weight':'bold',
'size':12
}
matplotlib.rc("font", **font)
plt.figure(figsize=(14,8))
# 优化:4,10月份分布分开
# x,y
y_4 = [11,17,16,11,12,11,12,13,10,14,8,13,12,15,14,17,18,21,16,17,30,14,15,15,15,19,21,22,22,22,23]
y_10 = [26,26,28,19,21,17,16,19,18,20,20,19,22,23,17,20,21,20,22,15,11,15,5,13,15,10,11,13,12,13,6]
x_4 = range(1,32) # 1~31
x_10 = range(51,82) # 20+31 ~ 31+31+21
# 绘制图形
plt.scatter(x_4,y_4)
plt.scatter(x_10,y_10)
# 刻度 四月1号 四月2号... 十月1号 十月2号...
x_t = list(x_4)+list(x_10)
x_l = ["四月{}号".format(i) for i in x_4]
x_l += ["十月{}号".format(i) for i in x_4]
plt.xticks(x_t[::3],x_l[::3],rotation=45)
plt.show()
分析:由图可得,四月份随着时间的推移,气温逐渐升高。相反十月份随着时间的推移,气温逐渐下降。
2.条形图
条形图介绍:条形图是用宽度相同的条形的高度或长短来表示数据多少的图形。条形图可以横置或纵置,纵置时也称为柱形图。
条形图特点:
(1)能够使人们一眼看出各个数据的大小。
(2)易于比较数据之间的差别。
2.1 竖条形图
- plt.bar(x,height):绘制以x为x轴位置,height为y轴位置的竖条形图
(1)width:调整柱子的宽度,默认为0.8
(2)bottom:y的起始值改变了,堆叠图中常使用
(3)align:默认为center 设置为:edge边缘,取决于width的正负 正:右边 负:左边 - plt.barh(y,width):绘制以y为y轴位置,width为y轴位置的水平条形图
举个例子:假设你获取到了2019年内地电影票房前20的电影(列表a)和电影票房数据(列表b),那么如何更加直观的展示该数据
a = [“流浪地球”,“复仇者联盟4:终局之战”,“哪吒之魔童降世”,“疯狂的外星人”,“飞驰人生”,“蜘蛛侠:英雄远征”,“扫毒2天地对决”,“烈火英雄”,“大黄蜂”,“惊奇队长”,“比悲伤更悲伤的故事”,“哥斯拉2:怪兽之王”,“阿丽塔:战斗天使”,“银河补习班”,“狮子王”,“反贪风暴4”,“熊出没”,“大侦探皮卡丘”,“新喜剧之王”,“使徒行者2:谍影行动”,“千与千寻”]
- b = [56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23,5.22] 单位:亿
from matplotlib import pyplot as plt
import matplotlib
font = {
'family':'SimHei',
'weight':'bold',
'size':12
}
matplotlib.rc("font", **font)
# 构建x,height
a = ["流浪地球","复仇者联盟4:终局之战","哪吒之魔童降世","疯狂的外星人","飞驰人生","蜘蛛侠:英雄远征","扫毒2天地对决","烈火英雄","大黄蜂","惊奇队长","比悲伤更悲伤的故事","哥斯拉2:怪兽之王","阿丽塔:战斗天使","银河补习班","狮子王","反贪风暴4","熊出没","大侦探皮卡丘","新喜剧之王","使徒行者2:谍影行动","千与千寻"]
b = [56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23,5.22]
# 放大画布
plt.figure(figsize = (14,8))
# 柱形图
# width 调整柱子的宽度 默认0.8
# bottom y的起始值改变了 堆叠图中常使用
# align 默认为:center 设置为:edge边缘 取决于width的正负 正:右边 负:左边
# plt.bar(a,b,width=0.3,bottom=10,align="edge")
plt.bar(a,b,width=-0.3,bottom=10,align="edge",color="g")
# 设置刻度
plt.xticks(rotation=90)
plt.show()
2.2 分组条形图
难点:添加标签
举个例子:
练习3:水果:苹果、梨子、车厘子
Q1销售额:1000、800、3000
Q2销售额:1200、700、2800
from matplotlib import pyplot as plt
import matplotlib
font = {
'family':'SimHei',
'weight':'bold',
'size':12
}
matplotlib.rc("font", **font)
# 构建x,height
fruits = ["苹果","梨子","车厘子"]
Q1_sales = [1000,800,3000]
Q2_sales = [1200,700,2800]
# 柱子的对应索引位置[0,1,2]
# 设置柱子宽度
width = 0.35
# rects1 = plt.bar(list(range(len(fruits))),Q1_sales,width)
# rects2 = plt.bar(list(range(len(fruits))),Q2_sales,width)
# 蓝、黄柱子宽度都为0.35 怎么使蓝色显示左边 黄色显示右边
# 位置左移width/2 位置 -width/2 [0-width/2,1-width/2,3-width/2]
po_l = [i-width/2 for i in list(range(len(fruits)))]
plt.bar(po_l,Q1_sales,width,label="Q1")
po_r = [i+width/2 for i in list(range(len(fruits)))]
plt.bar(po_r,Q2_sales,width,label="Q2")
# 设置图例
# 在plt.bar()中添加label
plt.legend()
# 数据标签
def auto_label(x_po,y_po):
for x_i,y_i in zip (x_po,y_po):
plt.annotate(f"{y_i}",xy=(x_i,y_i),xytext=(x_i-0.1,y_i))
# 数据标签
auto_label(po_l,Q1_sales)
auto_label(po_r,Q2_sales)
plt.xticks(list(range(len(fruits))),fruits)
plt.show()
2.3 堆叠条形图
from matplotlib import pyplot as plt
import matplotlib
font = {
'family':'SimHei',
'weight':'bold',
'size':12
}
matplotlib.rc("font", **font)
fruits = ["苹果","梨子","车厘子"]
Q1_sales = [1000,800,3000]
Q2_sales = [1200,200,2800]
plt.bar(fruits,Q1_sales,width=0.5,label="Q1")
plt.bar(fruits,Q2_sales,width=0.5,bottom=Q1_sales,label="Q2")
plt.legend()
plt.show()
2.4 水平条形图
from matplotlib import pyplot as plt
import matplotlib
font = {
'family':'SimHei',
'weight':'bold',
'size':12
}
matplotlib.rc("font", **font)
plt.figure(figsize=(14,8))
# 构建y、width
a = ["流浪地球","复仇者联盟4:终局之战","哪吒之魔童降世","疯狂的外星人","飞驰人生","蜘蛛侠:英雄远征","扫毒2天地对决","烈火英雄","大黄蜂","惊奇队长","比悲伤更悲伤的故事","哥斯拉2:怪兽之王","阿丽塔:战斗天使","银河补习班","狮子王","反贪风暴4","熊出没","大侦探皮卡丘","新喜剧之王","使徒行者2:谍影行动","千与千寻"]
b = [56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23,5.22]
plt.barh(a,b,height=0.5)
plt.show()
总结
- plt.legend() 设置图例
1.plt.plot(label)
2.局部设置字体,prop=font - plt.annotate(text,xy,xytext) 文本注释(设置标签)
- plt.scatter(x,y) 绘制散点图
1.分布
2.相关性 - 条形图
1.plt.bar(x,height) 柱状图
2.plt.barh(y,width) 条形图
3.堆叠条形图
4.分组条形图
5.align:edge center 分组
6.bottom:堆叠