失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Python:Matplotlib(折线图/散点图/条形图/直方图/饼图)

Python:Matplotlib(折线图/散点图/条形图/直方图/饼图)

时间:2021-10-15 01:26:41

相关推荐

Python:Matplotlib(折线图/散点图/条形图/直方图/饼图)

Python:Matplotlib

Matplotlib介绍1)折线图折线图介绍:画折线图的具体案例: 2)散点图散点图介绍:画散点图的具体案例: 3)条形图条形图介绍:画条形图的具体案例: 4)直方图)直方图介绍:画条形图的具体案例: 5)饼图饼图介绍:画饼图的具体案例:

Matplotlib介绍

Matplotlib包:

Matplotlib包专门用于开发2D图表、3D图表。(也就是画统计图)

Matplotlib官网:link.

Matplotlib下载和安装:建议直接下载安装Anaconda,直接拥有一个庞大包库,省去各种麻烦。link.

如果画图时遇到中文乱码问题:link.

matplotlib更多例子看官网:link.link.

统计图的优点:

统计表虽然能做到非常精确,但是不够直观。

统计图虽然不会那么精确,但更直观。

关于数据源:

把数据来源写一下,因为不同数据来源找到的数据或多或少有点差别,写下数据来源就算是一个凭证,也方便做后期校对。

1)折线图

折线图介绍:

折线图的特点:用于呈现数据的趋势变化

画折线图步骤:

1.导入matplotlib.pyplot

2.设定画图框架,如清晰度、框架大小、字体等等…

3.折线图的数据

4.画出折线图,设置各种参数(如图片水印、折线图各种效果…) + 设置x轴y轴(如刻度…) + 标题

附注:具体的各种参数可以看帮助文档或者网上找,自己可以慢慢调试,看各种参数的效果。

画折线图的具体案例:

1.一幅折线图

如果表示10点到12点的每一分钟的气温,如何绘制折线图观察每分钟气温的变化情况?

附注:题目和数据来源于网络课程

import matplotlib.pyplot as pltimport randomdef 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,请在一个图中绘制出该数据的折线图,以便比较自己和同桌间的差异,同时分析每年交女(男)朋友的数量走势。

附注:题目和数据来源于网络课程

import matplotlib.pyplot as pltdef 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()

2)散点图

散点图介绍:

散点图特点:呈现数据的分布规律、离散化程度

画散点图步骤:

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:

画散点图的具体案例:

北京3,10月份每天白天的最高气温(分别位于列表y1,y2),那么此时如何寻找出气温和随时间(天)变化的某种规律?

附注:题目和数据来源于网络课程

import matplotlib.pyplot as pltdef 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()

3)条形图

条形图介绍:

条形图特点:

画条形图步骤:

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 pltdef 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 pltdef 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()

4)直方图

)直方图介绍:

直方图特点:

频率分布直方图 和 频数分布直方图 的区别:

频率分布直方图 纵坐标:频率/组距

频数分布直方图 纵坐标:频数

画条形图的具体案例:

1.分组无余数的情况:

附注:作图数据来源于网络课程

import matplotlib.pyplot as pltdef 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 pltdef 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()

5)饼图

饼图介绍:

画饼图的参数:

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,5]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()

以后继续补充…

如果觉得《Python:Matplotlib(折线图/散点图/条形图/直方图/饼图)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。