Matplotlib数据可视化

目录

通过Matplotlib绘制各类图形

绘制折线图

绘图时的通用属性参数

绘制柱状图

绘制饼图

绘制直方图

设置坐标的技巧

使用中文展示坐标轴标签

设置坐标的范围

设置主刻度和次刻度 

设置并旋转坐标刻度文字

 增加可视化美观效果

设置图例

设置中文标题

设置网格效果

设置多图和子图效果 

通过figure对象同时绘制多张图

通过add_subplot方法绘制子图

通过subplot方法绘制子图

子图共享x坐标轴

在大图里绘制子图


        在完成数据收集和统计工作之后,我们可以利用Matplotlib库将数据进行可视化展示,最后得到的结果不但美观,还可以让人们非常直观快速的从数据中获取信息。

通过Matplotlib绘制各类图形

        Matplotlib库中封装了绘制各类图表的方法,通过设置参数还可以对图标进行修改。

绘制折线图

        代码如下: 

# -*- codeing = utf-8 -*-
from matplotlib import pyplot as plt
import matplotlib
import numpy as np

#通过Numpy设置x轴和y轴的坐标
x = np.arange(1,6,1)
y = np.array([5,7,18,2,10])
#通过plot方法绘制折线图
plt.plot(x,y)
#通过show方法展示
plt.show()

        plot方法的作用是通过传入的x和y绘制折线图,调用show方法将其展现出来。最后绘制出来的图片如下:

绘图时的通用属性参数

        在没有设置相关的参数时绘制出来的图片是Matplotlib库的默认方式,下面给出绘图常用的几个参数。

        

绘图常用参数
属性名含义

color

线条颜色
linewidth线条宽度
linestyle线条样式
marker标记方式
alpha透明度(0到1)

        官网具体参数详解

        代码如下:

# -*- codeing = utf-8 -*-
from matplotlib import pyplot as plt
import matplotlib
import numpy as np

x = np.arange(5)
plt.plot(x, x*0.5, color='#ff0011', linewidth='5', linestyle='-', alpha=0.5)
plt.plot(x, x, color='red', linewidth='2',  marker='o')
plt.plot(x, x*2, color='blue', linewidth='1', marker='v')
plt.show()

        三条直线分别采用了不同的颜色(color)、线条宽度(linewidth)、线条样式(linestyle)、标记方式(marker)、透明度(alpha),图片如下:

绘制柱状图

        方法为matplotlib.pyplot.bar()

        下面是芳芳各科考试分数的柱状图:

代码如下:

# -*- codeing = utf-8 -*-

from matplotlib import pyplot as plt

x = [1,2,3,4]
y = [66,95,100,82]
width = [0.2,0.8,0.4,1]
color = ['red','pink','blue','green']
x_label = ['class1','class2','class3','class4']
#绘制x刻度标签
plt.xticks(x,x_label)
#绘制柱状图
plt.bar(x, y, color=color, width=width, edgecolor='black')
plt.show()

        bar方法与plot方法参数用法基本一致,在这里edgecolor表示的是条柱边缘的颜色。为了能够更好的对应到各个科目,利用了xticks方法给x轴指定了标签,让条状图与科目直接对应起来。

绘制饼图

        饼状图可以帮助我们更加直观的观察到某一项数据在总体中所占的百分比,绘制 方法为matplotlib.pyplot.pie(),该方法常用参数如下表:

参数

含义

label该块饼图的说明
sizes每个统计项的数字
explode该块饼图离开中心的距离
radius半径
color颜色
startangle起始角度

        下面是芳芳一个月的支出情况:

        根据饼状图我们很容易可以看出来,芳芳是一个注重于穿衣的吃货。代码如下:

# -*- codeing = utf-8 -*-
from matplotlib import pyplot as plt

items = ['food','education','clothes','phone','others']
sizes = ['1200','200','500','200','400']
explode = [0,0.1,0.1,0.1,0.1]
colors = ['blue','red','yellow','green','orange']
plt.pie(sizes, explode=explode, labels=items, startangle=25, colors=colors)
plt.show()

绘制直方图

        直方图不同于柱状图,直方图的中间是没有空隙的,一般用来表示区间中数据的分布情况。绘制直方图的方法为pyplot.hist(),常用参数如下表:

参数含义
x对应x轴
bins柱状图个数
histtype直方图形状,默认为bar
align控制柱状图的水平分布
color颜色
density展示频数/频率统计结果
label标签

         下面是某班某次考试统计:

        代码如下:

# -*- codeing = utf-8 -*-
import matplotlib.pyplot as plt
import numpy as np

#分数
x = [99,86,45,64,89,90,76,95,97,99,92,83,84]
#直方图分布区间
bins = np.arange(50,101,10)
#绘制直方图
plt.hist(x, bins=bins, color='orange')
plt.show()

设置坐标的技巧

        为了让图标看起来更加简单,我们还可以设置一些坐标轴的相关信息。

使用中文展示坐标轴标签

        我们再来看看这幅图:

        是不是比刚才简单了许多? 

        代码如下:

# -*- codeing = utf-8 -*-
import matplotlib.pyplot as plt
import numpy as np

#分数
x = [99,86,45,64,89,90,76,95,97,99,92,83,84]
#直方图分布区间
bins = np.arange(50,101,10)
#绘制直方图
plt.hist(x, bins=bins, color='orange')
#设置中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.xlabel('分数')
plt.ylabel('人数')
plt.show()

        要注意,如果在图表中要使用中文,都必须加上plt.rcParams['font.sans-serif'] = ['SimHei']

设置坐标的范围

        有时候我们为了更加清楚的观察某个范围内数据的变化,还可以通过xlim和ylim方法设置坐标的范围。

        代码如下:

# -*- codeing = utf-8 -*-
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(-10,11,1)
plt.plot(x,2*x)
#设置坐标范围
plt.xlim(-2,2)
plt.ylim(-5,5)
plt.show()

设置主刻度和次刻度 

        为了使坐标轴上的刻度更加美观,可以设置主次刻度,同时也方便观察。

        代码如下:

# coding=utf-8
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator, FormatStrFormatter

xmajorLocator = MultipleLocator(2) 		# 将x轴主刻度设置为2的倍数
xmajorFormatter = FormatStrFormatter('%1.1f') # 设置x轴标签的格式
xminorLocator = MultipleLocator(0.5) 		# 将x轴次刻度设置为0.5的倍数
ymajorLocator = MultipleLocator(0.2) 	# 将y轴主刻度设置为0.2的倍数
ymajorFormatter = FormatStrFormatter('%1.2f') # 设置y轴标签的格式
yminorLocator = MultipleLocator(0.1)	# 将y轴次刻度设置为0.1的倍数

x = np.arange(0, 10, 0.1)
#设置子图,在ax里设置坐标轴刻度
ax = plt.subplot(111)
# 设置主刻度标签的位置,标签文本的格式
ax.xaxis.set_major_locator(xmajorLocator)
ax.xaxis.set_major_formatter(xmajorFormatter)
ax.yaxis.set_major_locator(ymajorLocator)
ax.yaxis.set_major_formatter(ymajorFormatter)

# 显示次刻度标签的位置
ax.xaxis.set_minor_locator(xminorLocator)
ax.yaxis.set_minor_locator(yminorLocator)
y = np.cos(x) 	# 绘图
plt.plot(x,y)
plt.show()

设置并旋转坐标刻度文字

        之前的一些范例当中,坐标轴上都是数字,但是在某一些场景当中需要用到文字。下图是一个股票收盘价折线图,x轴代表日期。为了不让文字都挤到一起,可以将其按一定角度旋转。

        代码中通过xticks方法设置了x轴每个刻度展示的文字,并通过参数rotation设置旋转角度。

# -*- codeing = utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt

#折线图
x = np.array([1,2,3,4,5])
y = np.array([21,20.5,21.6,21.8,22])
plt.xticks(x,('20210715','20210716','20210717','20210718','20210719'),rotation=30)
plt.yticks(np.arange(20,22.5,0.2))
plt.ylim(20,22)
#设置中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.xlabel("日期")
plt.ylabel("收盘价")
plt.plot(x,y,color='red')
plt.show()

 增加可视化美观效果

        通过设置图例的标题和网格等效果,数据会更加直观。

设置图例

        通过plt.legend方法来设置图例及其位置。

loc参数
数值参数值字符产参数值图例位置
0best最合适的位置
1upper right右上角
2upper left左上角
3lower right右下角
4lower left左下角
5right右侧
6center left左侧中间
7center right右侧中间
8lower center下侧中间
9upper center上侧中间
10center 中间

        图示如下:

        代码如下:

# coding=utf-8
import matplotlib.pyplot as plt
import numpy as np

x=np.arange(-3,4)
plt.xlim(-3,3)
plt.plot(x,x,color="green",label='y=x')
plt.plot(x,2*x,color="yellow",label='y=2x')
plt.plot(x,3*x,color="blue",label='y=3x')
plt.legend(loc='2') #绘制图例
plt.show()

设置中文标题

        通过设置标题,可以直接获取图表所要表达的内容。下图直接看图表就知道说的是芳芳的月支出占比。

        代码如下:

# coding=utf-8
import matplotlib.pyplot as plt
items = ['吃','教育','衣服','化妆品','其它']
sizes = [5000,2000,1000,3000,1000]
explode = (0,0.1,0.1,0.1,0.1)
colors=['blue','red','green','yellow','#ff00ff']
plt.pie(sizes,explode=explode,labels=items,startangle=30,colors=colors)
plt.rcParams['font.sans-serif']=['SimHei']#设置中文
#s设置标题
plt.title("芳芳本月开支",fontsize='large',fontweight='bold',verticalalignment ='center')
plt.show()

设置网格效果

        有时候因为变量较多,坐标轴单位小导致不容易看清楚数据到底对应到了多少,这时候就可以用grid方法引入表格。

        代码如下:

# coding=utf-8
import matplotlib.pyplot as plt

x=[1,2,3,4]# x轴刻度
y=[80,70,75,85]#y轴刻度
color=['red','green','blue','orchid']
x_label=['一班','二班','三班','四班']
#绘制x刻度标签
plt.xticks(x, x_label)
plt.rcParams['font.sans-serif']=['SimHei']#设置中文
#s设置标题
plt.title("班级平均分对比表")
#绘制柱状图
plt.bar(x, y,color=color)
plt.grid(linewidth='1',color='yellow',alpha=0.5)
plt.show()

目录

通过Matplotlib绘制各类图形

绘制折线图

绘图时的通用属性参数

绘制柱状图

绘制饼图

绘制直方图

设置坐标的技巧

使用中文展示坐标轴标签

设置坐标的范围

设置主刻度和次刻度 

设置并旋转坐标刻度文字

 增加可视化美观效果

设置图例

设置中文标题

设置网格效果

设置多图和子图效果 


设置多图和子图效果 

        在绘制各种报表的时候,有时候需要同时展示多张图对比,有时候也需要在一张大图中绘制子图,这就需要通过figure对象等方式。

通过figure对象同时绘制多张图

        通过figure对象可以绘制一块白板,下面是其构造方法。

figure(num=None,figsize=None,dpi=None,facecolor=None,edgecolor=None,frameon=True)
  • num:当前图形的编号名称
  • figsize:宽度和高度
  • dpi:分辨率,默认为80
  • facecolor:背景颜色
  • edgecolor:边界颜色
  • frameon:是否显示边框

        

        代码如下:

# coding=utf-8
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0, 10, 0.1)
# 第一个figure
plt.figure(num=1, figsize=(3,3),facecolor='yellow')
plt.plot(x, np.cos(x))
# 第二个figure
plt.figure(num=2, figsize=(3,3),facecolor='red')
plt.plot(x, np.sin(x))
# 第三个figure
plt.figure(num=3, figsize=(3,3),edgecolor='blue')
plt.plot(x, np.tan(x) )
plt.show()

通过add_subplot方法绘制子图

        上一个例子同时展示出了多张图,这里通过add_subplot方法在一张图中绘制出多张子图。

        代码如下:

# coding=utf-8
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0, 10, 0.1)
# 新建figure对象
fig=plt.figure()
# 子图1
ax1=fig.add_subplot(2,2,1)
ax1.plot(x, 2*x,label='y=2x',color='red')
ax1.legend()
# 子图2
ax2=fig.add_subplot(2,2,2)
ax2.plot(x, 5*x,label='y=5x',color='blue')
ax2.legend()
# 子图3
ax3=fig.add_subplot(2,2,3)
ax3.plot(x, 1/x,label='y=1/x',color='green')
ax3.legend()

# 子图4
ax4=fig.add_subplot(2,2,4)
ax4.plot(x, x*x,label='y=x²',color='orange')
plt.show()

         其中add_subplot(x,y,z)表示将白板分割成了x行y列,并将该子图创建在第z个位置。

通过subplot方法绘制子图

        通过subplot方法绘制出多张子图,该方法与add_subplot方法类似。

        代码如下:

# coding=utf-8
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0, 10, 0.1)
plt.subplot(2,1,1) 	# 第一个子图在2*1的第1个位置
plt.plot(x,2*x)
plt.subplot(2,2,3) 	# 第二个子图在2*2的第3个位置
plt.plot(x,4*x)
plt.subplot(2,2,4)  	# 第三个子图在2*2的第4个位置
plt.plot(x,1/x)
plt.show()

子图共享x坐标轴

        在同一场景中,子图还可以共享x轴。

        代码如下:

# coding=utf-8
import matplotlib.pyplot as plt
import numpy as np
#分数明细
class1=[98,87,96,82,70,65,66,72,42,58,76,92,100]
class2=[87,55,92,98,95,68,72,84,37,57,87,95,95]
#设置两个子图,并共享x轴
figure,(axClass1, axClass2) = plt.subplots(2, sharex=True, figsize=(10,6))
#设置连续的边界值,即直方图的分布区间,比如[50,60]等
bins=np.arange(50,101,10)
#设置中文,并设置两个子图的标题
plt.rcParams['font.sans-serif']=['SimHei']
axClass1.set_title("class1")
axClass2.set_title("class2")
#在两个子图里绘制直方图,统计各个区间的数值
axClass1.hist(class1,bins,color='red')
axClass2.hist(class2,bins,color='blue')
plt.show()

在大图里绘制子图

        在一些场景中,当需要更好展示某段数据时,将子图展示在大图里会更加有效率。

        代码如下:

# coding=utf-8
import matplotlib.pyplot as plt
import numpy as np

# 新建figure对象
fig=plt.figure()
ax=fig.add_axes([0.1,0.1,0.9,0.9])
child_ax=fig.add_axes([0.7,0.2,0.2,0.2])
x = np.arange(0, 10.1, 0.1)
ax.plot(x, np.sin(x),color='red')
# 子图
childX = np.arange(5, 6.1, 0.1)
child_ax.plot(childX,np.sin(childX),color='blue')
plt.show()

        add_axes方法用来创建子图,其中前两个参数为子图左下角在figure白板上的坐标,后两个参数为子图在x和y轴上的长度。 

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

楠怪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值