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 pltimport matplotlibfont = {\'family\':\'SimHei\',\'weight\':\'bold\',\'size\':12}matplotlib.rc(\"font\", **font)plt.figure(figsize=(14,8))# 优化:4,10月份分布分开# x,yy_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~31x_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 pltimport matplotlibfont = {\'family\':\'SimHei\',\'weight\':\'bold\',\'size\':12}matplotlib.rc(\"font\", **font)# 构建x,heighta = [\"流浪地球\",\"复仇者联盟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 pltimport matplotlibfont = {\'family\':\'SimHei\',\'weight\':\'bold\',\'size\':12}matplotlib.rc(\"font\", **font)# 构建x,heightfruits = [\"苹果\",\"梨子\",\"车厘子\"]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()中添加labelplt.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 pltimport matplotlibfont = {\'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 pltimport matplotlibfont = {\'family\':\'SimHei\',\'weight\':\'bold\',\'size\':12}matplotlib.rc(\"font\", **font)plt.figure(figsize=(14,8))# 构建y、widtha = [\"流浪地球\",\"复仇者联盟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:堆叠