欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 明星 > matplotlib数据展示

matplotlib数据展示

2025/4/19 12:27:13 来源:https://blog.csdn.net/2401_84944910/article/details/147168573  浏览:    关键词:matplotlib数据展示

目录

一、绘制直方图

1、简单直方图

2、绘制横向直方图

3、绘制堆叠直方图

4、对比直方图

二、折线图与散点图

三、绘制饼图

四、雷达图

1、简单雷达图

2、多层雷达图

五、总和


在前面的学习中,我们能够使用一些库进行数据的整合,收集,整理等,而在进行了这些操作之后,我们需要把这些整合好的数据进行更加直观的展示,比如用一些统计图来实现,而matplotlib就可以完成这个工作。

matplotlib是一个第三方库,需要使用pip命令去下载

一、绘制直方图

1、简单直方图

我们可以用matplotlib库来绘制一个基本的直方图:

import matplotlib.pyplot as plt     #主要进行绘图的模块
from matplotlib import rcParams     #包含了绘图时的可配置参数rcParams['font.family'] = rcParams['font.sans-serif'] = 'SimHei'    #设置中文支持,是中文的黑体ax = plt.figure().add_subplot()     #plt.figure()创建一个可视窗口,add_subplot() 是在窗口里面创建一个可绘画的子图(可以在一个窗口里面绘制多个子图)
ax.bar(x = (0.2 , 0.6 , 0.8 , 1.2) , height = (3 , 5 , 7 , 3.5) , width = 0.1)      #ax.bar()是在子图上绘图,里面的三个参数分别是指:①每个柱子的中心位置②每个柱子的高度③每个柱子的宽度(也可以设置成不同的五个数值)ax.set_title("我的第一个直方图!")   #为这个子图设置标题
plt.show()      #展示出来

输出:

(注:在绘制柱状图时,程序会根据数据的大小,来控制子图的大小,默认就是宽度比两边的柱子各往左和右一点,高度比最高的柱子高一点)

2、绘制横向直方图

想要绘制横向的直方图,我们只需要把上面的代码稍加改动:

import matplotlib.pyplot as plt     #主要进行绘图的模块
from matplotlib import rcParams     #包含了绘图时的可配置参数rcParams['font.family'] = rcParams['font.sans-serif'] = 'SimHei'ax = plt.figure().add_subplot()
ax.barh(y = (0.2 , 0.6 , 0.8 , 1.2) , width = (3 , 5 , 7 , 3.5) , height = 0.1)#↑  在这里bar变成了barh,x也变成了y,再把宽和高交换一下
ax.set_title("我的第一个直方图!")
plt.show()

效果:

3、绘制堆叠直方图

有时我们需要在一个柱子上显示多个数据,然后看看总和以及各个数据之间的占比,这时就需要堆叠直方图:

import matplotlib.pyplot as plt     #主要进行绘图的模块
from matplotlib import rcParams     #包含了绘图时的可配置参数rcParams['font.family'] = rcParams['font.sans-serif'] = 'SimHei'ax = plt.figure().add_subplot()labels = ['A' , 'B' , 'C' , 'D']    #创建了x轴上每一个柱子的标签
num1 = [5 , 10 , 7 , 12]
num2 = [6 , 5 , 12 , 10]    #两组中各个柱子的高度cordx = range(len(num1))    #创建范围对象,给每个柱子创建一个位置,位置的个数就和num1中的个数一样
rects1 = ax.bar(x = cordx , height = num1 , width = 0.5 , color = "red" , label = "Dept1")
#在子图上绘制第一组数据的各个柱状图,里面的参数分别是:①每个柱子的x轴位置 ②柱子高度 ③柱子宽度 ④柱子颜色 ⑤标签
rects2 = ax.bar(x = cordx , height = num2 , width = 0.5 , color = "green" , label = "Dept2" , bottom = num1)
#和上面一样,多了一个bottom,是设置第二组柱子的底部的起始位置,我们设置在了num1的上方,实现了堆叠效果
#上面的参数中“label”标签是应用在了一会图片的右上角ax.set_ylim(0 , 50)     #设置y轴范围
ax.set_ylabel("Profit")     #设置y轴的标签
ax.set_xticks(cordx)    #设置x轴的刻度
ax.set_xticklabels(labels)      #设置各个刻度的标签
ax.set_xlabel("In year 2025")   #设置x轴的标签
ax.set_title("My Data")     #设置子图的标题
ax.legend()     #显示图例,就是rects1和2里面的label(一会看图片的右上角)
plt.show()  #展示

效果:

4、对比直方图

当我们在一个类中有多组数据时,并且需要比较直观的比较,就需要对比直方图:

import matplotlib.pyplot as plt     #主要进行绘图的模块
from matplotlib import rcParams     #包含了绘图时的可配置参数rcParams['font.family'] = rcParams['font.sans-serif'] = 'SimHei'ax = plt.figure(figsize=(10,5)).add_subplot()   #创建新的窗口和子图,这里给窗口设置了大小ax.set_ylim(0,120)
ax.set_xlim(0,60)   #设置了x和y轴的范围x1 = [5 , 15 , 25 , 35 , 45]
x2 = [8 , 18 , 28 , 38 , 48]
x3 = [11 , 21 , 31 , 41 , 51]
#以上三组是每一个每一个柱子中心点的横坐标
#如果出现了各个柱子之间重叠的情况,可以调整这三个组之间的间距
#下面设置柱子宽度的时候,如果宽度和x之间的距离相同,每一个组之间的柱子就没有缝隙y1 = [25 , 29 , 66 , 24 , 67]
y2 = [66 , 25 , 87 , 57 , 28]
y3 = [12 , 56 , 90 , 68 , 35]
#以上三组是每一个柱子的数据rects1 = ax.bar(x1 , y1 , facecolor = "red" , width = 3 , label = 'A')
rects2 = ax.bar(x2 , y2 , facecolor = "green" , width = 3 , label = 'B')
rects3 = ax.bar(x3 , y3 , facecolor = "blue" , width = 3 , label = 'C')
#以上三组进行了绘图,参数分别是指:柱子的中心坐标,柱子高度,柱子颜色,柱子宽度,以及柱子的图例名称ax.set_xticks(x2)   #让x2,也就是每一组中中间的那个柱子和x轴坐标对其
ax.set_xticklabels(('A1' , 'A2' , 'A3' , 'A4' , 'A5'))      #每一组的标签ax.legend()     #显示图例def label(ax , rects):          #给每一个柱子上添加数字for rect in rects :     #遍历每一个柱子height = rect.get_height()      #获取柱子的高度ax.text(rect.get_x() - 0.05 + rect.get_width()/2.0 , height + 5 , str(height) , rotation = 90)#ax.text()在子图中添加文本,第一个参数是计算每一个文本的x轴位置,在起始位置+每一个柱子宽度的1/2再-0.05,即在每一个柱子的中心偏左#下一个就是文本的y轴位置,即在每一个柱子的高度上加5#第三个就是输入的内容,即每一个柱子的高度的具体字符#最后一个就是把文字旋转90度label(ax , rects1)
label(ax , rects2)
label(ax , rects3)
#调用三次label函数,进行赋值plt.show()

效果:

二、折线图与散点图

当我们有大量数据或者想要观察趋势的时候,我们就可以绘制一个散点图或者折线图:

import matplotlib.pyplot as plt     #主要进行绘图的模块
from matplotlib import rcParams     #包含了绘图时的可配置参数
import math , randomdef drawPlotPro(ax) :xs = [i / 100 for i in range(1500)]     #生成一个列表,里面包含1500个数据点,且每一个数据点是i/100ys = [10 * math.sin(x) for x in xs]     #对于列表xs中的每一个数据,我们进行10 * math.sin(x),来生成一个正弦波#上面这两个分别就是每一个点的x和y坐标ax.plot(xs , ys , "red" , label = "A")      #使用ax.plot绘制折线图,前两个是每一个点的xy坐标,第二个是颜色,然后是图例标签ys = list(range(-18 , 18))      #生成一个列表,里面是从-18到17的序列random.shuffle(ys)      #打乱他ax.scatter(range(16) , ys[:16] , c = "blue")    #ax.scatter()绘制散点图,参数第一个是x轴坐标,第二个是y轴坐标,第三个是颜色ax.plot(range(16) , ys[:16] , "blue" , label = "B")     #ax.plot()绘制折线图ax.legend()     #显示图例ax.set_xticks(range(16))    #x轴坐标是0,1,2...15的地方加刻度ax.set_xticklabels(range(16))   #刻度的标签ax = plt.figure(figsize=(10,4) , dpi=100).add_subplot()     #视窗的大小,以及分辨率(清晰度)
drawPlotPro(ax)     #调用ax
plt.show()

效果:

三、绘制饼图

import matplotlib.pyplot as plt     #主要进行绘图的模块
from matplotlib import rcParams     #包含了绘图时的可配置参数def DrawPiePro(ax) :lbs = ('A' , 'B' , 'C' , 'D')   #饼图各个块的标签sectors = [25 , 20 , 50 , 5]    #每一块的占比expl = [0 , 0.1 , 0 , 0]    #每一块的凸显程度ax.pie(x = sectors , labels = lbs , explode = expl , autopct = '%.2f' , shadow = True , labeldistance = 1.1 , pctdistance = 0.6 , startangle = 90)#ax.pie()绘制饼图,参数分别是:每一块的占比,凸显程度,显示百分比,保留两位小数,增加阴影效果,标签和饼图的距离(大于1就是向外),百分比标签和饼图的距离,以及绘制的起点位置,90就是正上方ax.set_title("pie sample")      #饼图标题ax = plt.figure().add_subplot()     #创建窗口和子图
DrawPiePro(ax)
plt.show()

效果:

四、雷达图

1、简单雷达图

import matplotlib.pyplot as plt     #主要进行绘图的模块
from matplotlib import rcParams     #处理汉字用def DrawRadar(ax) :pi = 3.1415926labels = ["语文" , "数学" , "英语" , "物理" , "化学" , "地理"]      #六个属性的名称attrNum = len(labels)   #属性的种类,也就是属性的个数,此处是6data = [120 , 110 , 110 , 70 , 88 , 90]     #各个属性的数值angles = [2 * pi * i / attrNum for i in range(attrNum)]     #以弧度为单位的六个属性对应的六个半径的角度angles2 = [x * 180 / pi for x in angles]    #这个是角度ax.set_ylim(0 , 150)    #半径的范围ax.set_thetagrids(angles2 , labels , fontproperties = "SimHei")     #绘制这六个半径,用角度制,以及各个属性的名称,和字体ax.fill(angles , data  , facecolor = 'g' , alpha = 0.25)    #把围起来的区域填充,用data数据,颜色是绿色,并设置了透明度rcParams['font.family'] = rcParams['font.sans-serif'] = 'SimHei'    #处理汉字
ax = plt.figure().add_subplot(projection = "polar")     #生成视窗和极坐标的子图DrawRadar(ax)
plt.show()

效果:

2、多层雷达图

import matplotlib.pyplot as plt  # 主要进行绘图的模块
from matplotlib import rcParams  # 处理汉字用rcParams['font.family'] = rcParams['font.sans-serif'] = 'SimHei'  # 处理汉字
pi = 3.1415926
names = ['张三', '李四', '王五']
labels = ["语文", "数学", "英语", "物理", "化学", "地理"]  # 六个属性的名称
attrNum = len(labels)  # 属性的种类,也就是属性的个数,此处是6
data = [[120, 125, 100], [130, 140, 130], [110, 100, 120], [70, 80, 90], [67, 79, 87],[90, 100, 97]]  # 各个属性的数值,第一个就是三个人各自的语文成绩angles = [2 * pi * i / attrNum for i in range(attrNum)]  # 以弧度为单位的六个属性对应的六个半径的角度
angles2 = [x * 180 / pi for x in angles]  # 这个是角度ax = plt.figure().add_subplot(projection="polar")  # 生成视窗和极坐标的子图
ax.fill(angles, data, alpha=0.25)  # 把围起来的区域填充,用data数据,并设置了透明度
ax.set_ylim(0, 150)  # 半径的范围
ax.set_thetagrids(angles2, labels)  # 绘制这六个半径,用角度制,以及各个属性的名称ax.legend(names, loc=(0.95, 0.9))   #添加图例,以及位置plt.show()

效果:

五、总和

在我们能绘制如此之多的图形后,我们可能需要在一个面板上就看到所有的数据们也就是把这些数据放在一个窗口上:

fig = plt.figure(figsize = (8,8))   #创建视窗ax = fig.add_subplot(2,2,1)     #添加子图1,即饼图,2,2,1的意思是划分处一个2x2的子图,并放在第一处(就是左上角)
DrawPiePro(ax)ax = fig.add_subplot(2,2,2 , projection = "polar")    #添加子图2
DrawRadar(ax)ax = plt.subplot2grid((2,2) , (1,0) , colspan=2)    #第二个参数1,0是指第一行,第零列,就是左下角的位置,第三个参数就是这个子图跨越两列
drawPlotPro(ax)plt.figtext(0.05 , 0.05 , 'subplot sample')     #在图形窗口添加文本plt.show()

当然这个要结合上面的各个我们自己创建的函数,我们把他们结合起来:

import matplotlib.pyplot as plt  # 主要进行绘图的模块
from matplotlib import rcParams  # 处理汉字用
import math, randomdef drawPlotPro(ax):xs = [i / 100 for i in range(1500)]  # 生成一个列表,里面包含1500个数据点,且每一个数据点是i/100ys = [10 * math.sin(x) for x in xs]  # 对于列表xs中的每一个数据,我们进行10 * math.sin(x),来生成一个正弦波# 上面这两个分别就是每一个点的x和y坐标ax.plot(xs, ys, "red", label="A")  # 使用ax.plot绘制折线图,前两个是每一个点的xy坐标,第二个是颜色,然后是图例标签ys = list(range(-18, 18))  # 生成一个列表,里面是从-18到17的序列random.shuffle(ys)  # 打乱他ax.scatter(range(16), ys[:16], c="blue")  # ax.scatter()绘制散点图,参数第一个是x轴坐标,第二个是y轴坐标,第三个是颜色ax.plot(range(16), ys[:16], "blue", label="B")  # ax.plot()绘制折线图ax.legend()  # 显示图例ax.set_xticks(range(16))  # x轴坐标是0,1,2...15的地方加刻度ax.set_xticklabels(range(16))  # 刻度的标签#-------------------------------------------------------------------------------def DrawPiePro(ax) :lbs = ('A' , 'B' , 'C' , 'D')   #饼图各个块的标签sectors = [25 , 20 , 50 , 5]    #每一块的占比expl = [0 , 0.1 , 0 , 0]    #每一块的凸显程度ax.pie(x = sectors , labels = lbs , explode = expl , autopct = '%.2f' , shadow = True , labeldistance = 1.1 , pctdistance = 0.6 , startangle = 90)#ax.pie()绘制饼图,参数分别是:每一块的占比,凸显程度,显示百分比,保留两位小数,增加阴影效果,标签和饼图的距离(大于1就是向外),百分比标签和饼图的距离,以及绘制的起点位置,90就是正上方ax.set_title("pie sample")      #饼图标题#-------------------------------------------------------------------------------def DrawRadar(ax) :pi = 3.1415926labels = ["语文" , "数学" , "英语" , "物理" , "化学" , "地理"]      #六个属性的名称attrNum = len(labels)   #属性的种类,也就是属性的个数,此处是6data = [120 , 110 , 110 , 70 , 88 , 90]     #各个属性的数值angles = [2 * pi * i / attrNum for i in range(attrNum)]     #以弧度为单位的六个属性对应的六个半径的角度angles2 = [x * 180 / pi for x in angles]    #这个是角度ax.set_ylim(0 , 150)    #半径的范围ax.set_thetagrids(angles2 , labels , fontproperties = "SimHei")     #绘制这六个半径,用角度制,以及各个属性的名称,和字体ax.fill(angles , data  , facecolor = 'g' , alpha = 0.25)    #把围起来的区域填充,用data数据,颜色是绿色,并设置了透明度#-------------------------------------------------------------------------------fig = plt.figure(figsize = (8,8))   #创建视窗ax = fig.add_subplot(2,2,1)     #添加子图1,即饼图,2,2,1的意思是划分处一个2x2的子图,并放在第一处(就是左上角)
DrawPiePro(ax)ax = fig.add_subplot(2,2,2 , projection = "polar")    #添加子图2
DrawRadar(ax)ax = plt.subplot2grid((2,2) , (1,0) , colspan=2)    #第二个参数1,0是指第一行,第零列,就是左下角的位置,第三个参数就是这个子图跨越两列
drawPlotPro(ax)plt.figtext(0.05 , 0.05 , 'subplot sample')     #在图形窗口添加文本plt.show()

效果:

以上就是matplotlib数据展示的全部内容:)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词