Matplotlib包: Matplotlib包专门用于开发2D图表、3D图表。(也就是画统计图) Matplotlib官网:link. Matplotlib下载和安装:建议直接下载安装Anaconda,直接拥有一个庞大包库,省去各种麻烦。link. 如果画图时遇到中文乱码问题:link. matplotlib更多例子看官网:link.link. 统计图的优点: 统计表虽然能做到非常精确,但是不够直观。 统计图虽然不会那么精确,但更直观。 关于数据源: 把数据来源写一下,因为不同数据来源找到的数据或多或少有点差别,写下数据来源就算是一个凭证,也方便做后期校对。
折线图的特点:用于呈现数据的趋势变化 画折线图步骤: 1.导入matplotlib.pyplot 2.设定画图框架,如清晰度、框架大小、字体等等… 3.折线图的数据 4.画出折线图,设置各种参数(如图片水印、折线图各种效果…) + 设置x轴y轴(如刻度…) + 标题 附注:具体的各种参数可以看帮助文档或者网上找,自己可以慢慢调试,看各种参数的效果。
1.一幅折线图 如果表示10点到12点的每一分钟的气温,如何绘制折线图观察每分钟气温的变化情况? 附注:题目和数据来源于网络课程
import matplotlib.pyplot as plt import random def all_title(xlabel, ylabel, title): plt.xlabel(xlabel) #x轴标题 plt.ylabel(ylabel) #y轴标题 plt.title(title) #总标题 #画图框架 plt.figure(figsize = (20, 6), dpi = 80) plt.rcParams['font.sans-serif']=['SimHei'] #字体 #数据 x = range(120) y = [random.randint(20, 35) for i in range(120)] #折线图 plt.plot(x, y) _xticks = ["10点{}分".format(i) for i in x if i < 60] _xticks += ["11点{}分".format(i-60) for i in x if i >= 60] plt.xticks(x[::4], _xticks[::4], rotation = 45) #x轴刻度 all_title("时间", "温度", "温度随时间变化趋势图") plt.text( 1, 20, "作者:xw", fontsize=40, color="gray", alpha=0.4) #水印 plt.show()2.多幅折线图 假设大家在30岁的时候,根据自己的实际情况,统计出来了你和你同桌各自从11岁到30岁每年交的女(男)朋友的数量如列表y1和y2,请在一个图中绘制出该数据的折线图,以便比较自己和同桌20年间的差异,同时分析每年交女(男)朋友的数量走势。 附注:题目和数据来源于网络课程
import matplotlib.pyplot as plt def set_axes(axes): plt.sca(axes) #哪个图需要处理 _xaxes = ["{}岁".format(i) for i in x] plt.xticks(x, _xaxes)#x轴刻度 plt.xlabel("年龄") #x轴标题 plt.ylabel("朋友个数") #y轴标题 plt.title("朋友个数随年龄变化") #总标题 #画图框架 fig, axes = plt.subplots(nrows = 1, ncols = 2, figsize = (20, 8), dpi = 80) #数据 x = range(11,31) y1 = [1, 0, 1, 1, 2, 4, 3, 2, 3, 4, 4, 5, 6, 5, 4, 3, 3, 1, 1, 1] y2 = [1, 0, 3, 1, 2, 2, 3, 3, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1] #折线图 axes[0].plot(x, y1, color = "r", linestyle = "--", linewidth = 1, alpha = 1) set_axes(axes[0]) axes[1].plot(x, y2 ) set_axes(axes[1]) plt.text( 1, 1, "作者:xw", fontsize=40, color="gray", alpha=0.4) #水印 plt.show()散点图特点:呈现数据的分布规律、离散化程度 画散点图步骤: 1.导入matplotlib.pyplot 2.设定画图框架,如清晰度、框架大小、字体等等… 3.散点图的数据 4.画出散点图,设置各种参数(如图片水印、散点图各种效果…) + 设置x轴y轴(如刻度…) + 标题 附注:具体的各种参数可以看帮助文档或者网上找,自己可以慢慢调试,看各种参数的效果。
散点图的具体参数: matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None,vmin=None,vmax=None, alpha=None, linewidths=None, verts=None, edgecolors=None, hold=None, data=None, **kwargs) x,y :横纵坐标 s :散点(标记)的大小,默认20 c :散点(标记)的颜色,默认蓝色。b蓝色,c青色,g绿色,k黑色,m洋红,r红色,w白色,y黄色 marker :散点(标记)的形状,默认是".",即圆点。可自定义,可以自定义成其它形状,也可以自定义成文字,如" h e l l o hello hello" cmap :英文对应colormap,用于表示从第一个点开始到最后一个点之间颜色渐进变化,如c=y1,cmap=plt.cm.Reds。 norm: normalize, vmin: vmax: alpha :散点形状的透明度,alpha的范围为[0,1],从透明到不透明。 linewidths :散点(标记)的边框的宽度 verts: edgecolors :散点(标记)的边框颜色 hold: data: **kwargs:
北京2016年3,10月份每天白天的最高气温(分别位于列表y1,y2),那么此时如何寻找出气温和随时间(天)变化的某种规律? 附注:题目和数据来源于网络课程
import matplotlib.pyplot as plt def all_title(xlabel, ylabel, title): plt.xlabel(xlabel) #x轴标题 plt.ylabel(ylabel) #y轴标题 plt.title(title) #总标题 #画图框架 plt.figure(figsize = (20, 8), dpi = 100) #数据 x1 = range(1, 32) x2 = range(50, 81) y1 = [11,17,16,6,12,15,14,17,14,17,18,21,12,15,14,17,18,21,16,17,20,17,15,16,18,19,21,26,23,24,22] y2 = [26,26,28,19,21,17,16,19,18,20,20,19,22,23,17,20,21,20,22,15,11,15,5,13,17,10,11,13,12,13,6] #散点图 plt.scatter(x1, y1) plt.scatter(x2, y2) _xticks = ["3月{}号".format(i) for i in x1] _xticks += ["10月{}号".format(i) for i in x1] plt.xticks(x[::2], _xticks[::2], rotation = 45) #x轴刻度 all_title("时间", "温度", "温度随时间变化分布规律") plt.text( 5, 5, "作者:xw", fontsize=40, color="gray", alpha=0.4) #水印 plt.show()条形图特点: 画条形图步骤: 1.导入matplotlib.pyplot 2.设定画图框架,如清晰度、框架大小、字体等等… 3.条形图的数据 4.画出条形图,设置各种参数(如图片水印、散点图各种效果…) + 设置x轴y轴(如刻度…) + 标题 附注:具体的各种参数可以看帮助文档或者网上找,自己可以慢慢调试,看各种参数的效果。
条形图分类: 1.竖条:(条形图的条是竖的) 竖条:matplotlib.pyplot.bar(横坐标,纵坐标),条粗细用width 2.横条:(条形图的条是横的) 横条:matplotlib.pyplot.barh(纵坐标,横坐标),条粗细用height,更多详细信息看帮助文档help(plt.barh)
附注:作图数据来源于网络课程
import matplotlib.pyplot as plt def all_title(xlabel, ylabel, title): plt.xlabel(xlabel) #x轴标题 plt.ylabel(ylabel) #y轴标题 plt.title(title) #总标题 #画图框架 plt.figure(figsize = (20, 8), dpi = 100) #数据 _x = ["战狼2","速度与激情8","功夫瑜伽","西游伏妖篇","变形金刚5:最后的骑士","摔跤吧!爸爸","加勒比海盗5:死无对证","金刚:骷髅岛","极限特工:终极回归","生化危机6:终章","乘风破浪","神偷奶爸3","智取威虎山","大闹天竺","金刚狼3:殊死一战","蜘蛛侠:英雄归来","悟空传","银河护卫队2","情圣","新木乃伊"] y = [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] x = range(len(_x)) #条形图 plt.bar(x, y, width = 0.7) plt.xticks(x, _x, rotation = 70) #x轴刻度(仅是把数据列表放进去,如果需要调整步长就调整步长) all_title("电影", "票房(亿)", "电影票房数据对比图") plt.text( 5, 14, "作者:xw", fontsize=40, color="gray", alpha=0.4) #水印 plt.show()附注:作图数据来源于网络课程
import matplotlib.pyplot as plt def all_title(xlabel, ylabel, title): #封装标题们 plt.xlabel(xlabel) #x轴标题 plt.ylabel(ylabel) #y轴标题 plt.title(title) #总标题 #画图框架 plt.figure(figsize = (20, 8), dpi = 100) #数据 x = ["战狼2","速度与激情8","功夫瑜伽","西游伏妖篇","变形金刚5:最后的骑士","摔跤吧!爸爸","加勒比海盗5:死无对证","金刚:骷髅岛","极限特工:终极回归","生化危机6:终章","乘风破浪","神偷奶爸3","智取威虎山","大闹天竺","金刚狼3:殊死一战","蜘蛛侠:英雄归来","悟空传","银河护卫队2","情圣","新木乃伊"] y = [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] #条形图 plt.barh(x, y, height = 0.5) all_title("票房(亿)", "电影", "电影票房数据对比图") plt.text( 5, 14, "作者:xw", fontsize=40, color="gray", alpha=0.4) #水印 plt.show()直方图特点:
频率分布直方图 和 频数分布直方图 的区别: 频率分布直方图 纵坐标:频率/组距 频数分布直方图 纵坐标:频数
1.分组无余数的情况: 附注:作图数据来源于网络课程
import matplotlib.pyplot as plt def all_title(xlabel, ylabel, title): #封装标题们 plt.xlabel(xlabel) #x轴标题 plt.ylabel(ylabel) #y轴标题 plt.title(title) #总标题 #画图框架,一个图形,图形里可显示中文 plt.figure(figsize = (20, 8), dpi = 100) #数据 a=[131, 98, 125, 131, 124, 139, 131, 117, 128, 108, 135, 138, 131, 102, 107, 114, 119, 128, 121, 142, 127, 130, 124, 101, 110, 116, 117, 110, 128, 128, 115, 99, 136, 126, 134, 95, 138, 117, 111,78, 132, 124, 113, 150, 110, 117, 86, 95, 144, 105, 126, 130,126, 130, 126, 116, 123, 106, 112, 138, 123, 86, 101, 99, 136,123, 117, 119, 105, 137, 123, 128, 125, 104, 109, 134, 125, 127,105, 120, 107, 129, 116, 108, 132, 103, 136, 118, 102, 120, 114,105, 115, 132, 145, 119, 121, 112, 139, 125, 138, 109, 132, 134,156, 106, 117, 127, 144, 139, 139, 119, 140, 83, 110, 102,123,107, 143, 115, 136, 118, 139, 123, 112, 118, 125, 109, 119, 133,112, 114, 122, 109, 106, 123, 116, 131, 127, 115, 118, 112, 135,115, 146, 137, 116, 103, 144, 83, 123, 111, 110, 111, 100, 154,136, 100, 118, 119, 133, 134, 106, 129, 126, 110, 111, 109, 141,120, 117, 106, 149, 122, 122, 110, 118, 127, 121, 114, 125, 126,114, 140, 103, 130, 141, 117, 106, 114, 121, 114, 133, 137, 92,121, 112, 146, 97, 137, 105, 98, 117, 112, 81, 97, 139, 113,134, 106, 144, 110, 137, 137, 111, 104, 117, 100, 111, 101, 110,105, 129, 137, 112, 120, 113, 133, 112, 83, 94, 146, 133, 101,131, 116, 111, 84, 137, 115, 122, 106, 144, 109, 123, 116, 111,111, 133, 150] width = 3 #组距 num = int((max(a)-min(a)) / width) #组数= 极差/组距,极差注意加括号 #直方图 plt.hist(a, num) plt.xticks(range(min(a), max(a) + 1)[::width]) plt.grid(linestyle = ":", alpha = 0.7) #网格 all_title("电影时长", "电影数", "电影数量及时长统计") plt.show()2.分组无余数的情况: 附注:作图数据来源于网络课程
import matplotlib.pyplot as plt def all_title(xlabel, ylabel, title): #封装标题们 plt.xlabel(xlabel) #x轴标题 plt.ylabel(ylabel) #y轴标题 plt.title(title) #总标题 #画图框架,一个图形,图形里可显示中文 plt.figure(figsize = (20, 8), dpi = 100) plt.rcParams['font.sans-serif']=['SimHei'] #字体 #数据 a=[131, 98, 125, 131, 124, 139, 131, 117, 128, 108, 135, 138, 131, 102, 107, 114, 119, 128, 121, 142, 127, 130, 124, 101, 110, 116, 117, 110, 128, 128, 115, 99, 136, 126, 134, 95, 138, 117, 111,78, 132, 124, 113, 150, 110, 117, 86, 95, 144, 105, 126, 130,126, 130, 126, 116, 123, 106, 112, 138, 123, 86, 101, 99, 136,123, 117, 119, 105, 137, 123, 128, 125, 104, 109, 134, 125, 127,105, 120, 107, 129, 116, 108, 132, 103, 136, 118, 102, 120, 114,105, 115, 132, 145, 119, 121, 112, 139, 125, 138, 109, 132, 134,156, 106, 117, 127, 144, 139, 139, 119, 140, 83, 110, 102,123,107, 143, 115, 136, 118, 139, 123, 112, 118, 125, 109, 119, 133,112, 114, 122, 109, 106, 123, 116, 131, 127, 115, 118, 112, 135,115, 146, 137, 116, 103, 144, 83, 123, 111, 110, 111, 100, 154,136, 100, 118, 119, 133, 134, 106, 129, 126, 110, 111, 109, 141,120, 117, 106, 149, 122, 122, 110, 118, 127, 121, 114, 125, 126,114, 140, 103, 130, 141, 117, 106, 114, 121, 114, 133, 137, 92,121, 112, 146, 97, 137, 105, 98, 117, 112, 81, 97, 139, 113,134, 106, 144, 110, 137, 137, 111, 104, 117, 100, 111, 101, 110,105, 129, 137, 112, 120, 113, 133, 112, 83, 94, 146, 133, 101,131, 116, 111, 84, 137, 115, 122, 106, 144, 109, 123, 116, 111,111, 133, 150] width = 5 #组距 num = int((max(a)-min(a)) / width) #组数= 极差/组距,极差注意加括号 x = [min(a) + i * width for i in range(num+2)] #78+0*5=78 78+1*5=83 78+10=88 93 .....分组区间,假设组数15.5 到了则例取15 我们起码要用到16 所以必须17,所以要加2 #直方图 plt.hist(a, x) plt.xticks(x) plt.grid(linestyle = ":", alpha = 0.7) #网格 all_title("电影时长", "电影数", "电影数量及时长统计") plt.show()画饼图的参数: matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, counterclock=True, wedgeprops=None, textprops=None, center=(0, 0), frame=False, rotatelabels=False, hold=None, data=None) x :饼图各部分的比例,如果sum(x)>1(饼图各部分的比例之和),会将多出的部分进行均分。 explode :饼图各部分离开圆心的距离。默认值为0,不离开圆心。 labels :饼图各部分外侧显示的说明文字。 colors :饼图各部分的颜色。默认值为None,使用当前活动环的颜色。 autopct :饼图各部分百分比,可以使用format字符串或者format function。’%1.1f’:指小数点后保留一位有效值,’%1.2f%%’:保留两位小数点,增加百分号(%)。 pctdistance :autopct的位置,默认值为0.6。 shadow :饼图是否阴影。默认值为False,即没有阴影。 labeldistance :labels的位置,默认值为1.1,默认在饼图外侧,小于1则绘制在饼图里面。 startangle :起始绘制角度,默认图是从x轴正方向逆时针画起,如设定=90则从y轴正方向画起。 radius :控制饼图半径,默认值为1; counterclock :指定指针方向;默认为:True,即逆时针。False即可改为顺时针。 wedgeprops :字典类型,可选参数,默认值:None。参数字典传递给wedge对象用来画一个饼图。例如:wedgeprops={‘linewidth’:3}设置wedge线宽为3。 textprops :设置标签(labels)和比例文字的格式;字典类型,可选参数,默认值为:None。传递给text对象的字典参数。 center :浮点类型的列表,可选参数,默认值:(0,0)。图标中心位置。 frame :默认值:False。如果是true,绘制带有表的轴框架。 rotatelabels :默认值为:False。如果为True,旋转每个label到指定的角度。
附注:作图数据来源于网络课程
import matplotlib.pyplot as plt #画图框架 plt.figure(figsize = (20, 8), dpi = 100) #数据 movie_name = ['雷神3:诸神黄昏','正义联盟','东方快车谋杀案','寻梦环游记','全球风暴', '降魔传','追捕','七十七天','密战','狂兽','其它'] place_count = [60605,54546,45819,28243,13270,9945,7679,6799,6101,4621,20105] colors = ['b','r','g','y','c','m','y','k','c','g','g'] #饼图 plt.pie(place_count, labels = movie_name, autopct = "%3.2f%%", colors = colors) plt.axis("equal") #一定画出圆形 plt.legend() #显示具体描述性信息,默认右上角 plt.text( 1, 1, "作者:xw", fontsize=40, color="gray", alpha=0.4) #水印 plt.show()以后继续补充…