matplotlib

matplotlib:Python图形绘图库,将数据进行可视化,更直观的呈现
使数据更客观、更有说服力
首先,导入Matplotlib包中的Pyplot模块

from matplotlib import pyplot as plt

基本框架

from matplotlib import pyplot as plt
import numpy as np
x=np.arange(-50,50)
y=x **2
#绘制图形
plt.plot(x,y)
plt.show()

在这里插入图片描述

基本方法

1.plt.title()

from matplotlib import pyplot as plt
import numpy as np
x=np.arange(-50,50)
y=x **2
#标题
plt.title("y=x^2")
plt.plot(x,y)
plt.show()

在这里插入图片描述

默认标题不支持中文,修改字体设置

方法一:导入黑体
下载SimHei字体
解决中文乱码

from matplotlib import pyplot as plt
import numpy as np
x=np.arange(-50,50)
y=x **2
plt.rcParams['font.sans-serif']=["SimHei"]
plt.title("y等于x的平方")
plt.rcParams['axes.unicode_minus']=False
#绘制图形
plt.plot(x,y)
plt.show()

在这里插入图片描述

方法二:

plt.rcParams["font.sans-serif"]

在这里插入图片描述
则上面改为

from matplotlib import pyplot as plt
import numpy as np
x=np.arange(-50,50)
y=x **2
plt.rcParams['font.sans-serif']=["SimHei"]
plt.title("y等于x的平方")
#绘制图形
plt.plot(x,y)
plt.show()

在这里插入图片描述
但是负号无法展现

修改轴中的负号编码
plt.rcParams['axes.unicode_minus']=False

from matplotlib import pyplot as plt
import numpy as np
x=np.arange(-50,50)
y=x **2
plt.rcParams['font.sans-serif']=["SimHei"]
plt.title("y等于x的平方")
plt.rcParams['axes.unicode_minus']=False
#绘制图形
plt.plot(x,y)
plt.show()

在这里插入图片描述

2.x和y轴名称

plt.xlable() 
plt.ylable()
from matplotlib import pyplot as plt
import numpy as np
x=np.arange(-50,50)
y=x **2
plt.rcParams['font.sans-serif']=["SimHei"]
plt.title("y等于x的平方")
plt.rcParams['axes.unicode_minus']=False
#设置x和y轴名称
plt.xlabel("x轴")
plt.ylabel("y轴")
plt.plot(x,y)
plt.show()

在这里插入图片描述

3.设置标签文字大小

fontsize参数:设置文字大小
linewidth参数:设置线条

from matplotlib import pyplot as plt
import numpy as np
x=np.arange(-50,50)
y=x **2
plt.rcParams['font.sans-serif']=["SimHei"]
plt.title("y等于x的平方",fontsize=16)
plt.rcParams['axes.unicode_minus']=False
#设置x和y轴名称字体大小
plt.xlabel("x轴",fontsize=16)
plt.ylabel("y轴",fontsize=16)
#设置线条宽度
plt.plot(x,y,linewidth=5)
plt.show()

在这里插入图片描述

绘制多个图像

from matplotlib import pyplot as plt
import numpy as np
x=np.arange(-10,10)
y1=x **2
y2=x+1
plt.xlabel("x",fontsize=12)
plt.ylabel("y")
plt.plot(x,y1)
plt.plot(x,y2)
plt.show()

在这里插入图片描述

4.设置x和y的刻度

xticks

  • ticks:此参数是xtick位置的列表,和一个可选参数,如果将一个空列表作为参数传递,则它将删除所有xticks
  • labels:把显示的数据替换
  • rotation旋转角度
  • color颜色
from matplotlib import pyplot as plt
import numpy as np
x=np.arange(-10,10)
y1=x **2
y2=x+1
plt.xlabel("x",fontsize=12)
plt.ylabel("y")
#间隔一个显示
plt.xticks(range(-10,10,2))
plt.plot(x,y1)
plt.plot(x,y2)
plt.show()

在这里插入图片描述

from matplotlib import pyplot as plt
import numpy as np
x=np.arange(-10,10)
y1=x **2
y2=x+1
plt.xlabel("x",fontsize=12)
plt.ylabel("y")
#labels设置
plt.xticks(range(-10,10,2),labels=[1,2,3,4,5,6,7,8,9,10])
plt.plot(x,y1)
plt.plot(x,y2)
plt.show()

在这里插入图片描述

from matplotlib import pyplot as plt
import numpy as np
x=np.arange(-10,10)
y1=x **2
y2=x+1
plt.xlabel("x",fontsize=12)
plt.ylabel("y")
#label设置
plt.rcParams['font.sans-serif']=["SimHei"]
plt.rcParams['axes.unicode_minus']=False
x_ticks=range(-10,10,2)
x_labels=['%s度'%i for i in x_ticks]
plt.xticks(x_ticks,x_labels,rotation=45)
plt.plot(x,y1)
plt.plot(x,y2)
plt.show()

在这里插入图片描述

5.图例

集中地图一角或一侧的地图上各种符号和颜色所代表内容与制表的说明

from matplotlib import pyplot as plt
import numpy as np
x=np.arange(-10,10)
y1=x **2
y2=x+1
plt.xlabel("x",fontsize=12)
plt.ylabel("y")
plt.rcParams['font.sans-serif']=["SimHei"]
plt.rcParams['axes.unicode_minus']=False
x_ticks=range(-10,10,2)
x_labels=['%s度'%i for i in x_ticks]
plt.xticks(x_ticks,x_labels,rotation=45)
#给线起label名称
plt.plot(x,y1,label="收入")
plt.plot(x,y2,label="支出")
#默认会使用图形的label值作为图例的说明
plt.legend()
plt.show()

在这里插入图片描述

可以自己设置图示的位置

loc=
在这里插入图片描述

from matplotlib import pyplot as plt
import numpy as np
x=np.arange(-10,10)
y1=x **2
y2=x+1
plt.xlabel("x",fontsize=12)
plt.ylabel("y")
plt.rcParams['font.sans-serif']=["SimHei"]
plt.rcParams['axes.unicode_minus']=False
x_ticks=range(-10,10,2)
x_labels=['%s度'%i for i in x_ticks]
plt.xticks(x_ticks,x_labels,rotation=45)
plt.plot(x,y1,label="收入")
plt.plot(x,y2,label="支出")
#设置图示的位置为center
plt.legend(loc='center')
plt.show()

在这里插入图片描述

6.其它元素可视性

6.1.显示网格grid()

plt.grid()
  • 显示网格
  • linestyle:线型
  • color:颜色
  • linewidth:宽度
  • axis:x,y,both,显示x/y两者的格网
from matplotlib import pyplot as plt
import numpy as np
x=np.arange(10)
y=x **2
plt.plot(x,y)
# 显示网格线,虚线,颜色,宽度,只显示x轴的
plt.grid(linestyle="--",color="gray",linewidth="0.5",axis='x')
plt.show()

在这里插入图片描述

6.2.plt.gca()获取坐标轴变量,对坐标轴的操作

plt.spines黑色边框线,分top,bottom,left,right
plt.gca().spines["right"]获取一边框
移动:
postion位置参数有三种,

  • data数值移动,其后数字代表挪动到y轴的刻度值
  • outward向外移动
  • axes:0.0-1.0之间,整个轴上的比例
from matplotlib import pyplot as plt
import numpy as np
x=np.arange(10)
y=x **2
plt.plot(x,y)
#获取当前坐标轴
ax=plt.gca()
#通过坐标轴spines,可以设置颜色
ax.spines["right"].set_color("none")
ax.spines["top"].set_color("none")
#移动下轴到指定位置
#
ax.spines["left"].set_position(("axes",0.5))
plt.show()

在这里插入图片描述

from matplotlib import pyplot as plt
import numpy as np
x=np.arange(10)
y=x **2
plt.plot(x,y)
#获取当前坐标轴
ax=plt.gca()
ax.spines["right"].set_color("none")
ax.spines["top"].set_color("none")
#指定 data 设置的bottom(也就是指定的x轴)绑定到y轴的0这个点上
ax.spines["bottom"].set_position(("data",0.0))
plt.show()

在这里插入图片描述

7.设置图片大小figure

创建图形对象

plt.figure(
    num=None,#图像编号或名称
    figsize=None,#指定宽和高
    dpi=None,#分辨率,即每英寸多少个像素
    facecolor=None,#背景颜色
    edgecolor=None,#边框颜色
    frameon=True,#是否显示边框
)

plt.figure()里面传入参数,figsize元组,长宽
图像模糊时可以传入dpi参数,让图片更清晰

8.图片保存savefig

from matplotlib import pyplot as plt
import numpy as np
x=range(2,26,2)
y=[15,13,14,27,20,25,26,26,24,22,18,15]
#设置图片大小
plt.figure(figsize=(20,8),dpi=80,facecolor='gray')
#传入x和y,通过plot绘制折线图
plt.plot(x,y)
#保存图片为svg矢量图格式,放大不会有锯齿
plt.savefig("./t1.png")
#展示图形
plt.show()

一、折线图

坐标连接成线
准备好要画的点x坐标的值,y坐标的值

from matplotlib import pyplot as plt
import numpy as np
x=range(2,26,2)
y=[15,13,14,27,20,25,26,26,24,22,18,15]
#传入x和y,通过plot绘制折线图
plt.plot(x,y)
#展示图形
plt.show()

在这里插入图片描述

绘制多子图

figure是绘制对象(相当于画布),一个figure对象可以包含多个Axes子图
1.add_axes(rect)添加区域
生成一个axes轴域对象,对象的位置又参数rect决定
rect位置参数,接受一个4个元素组成的浮点数列表,形如[left,bottom,width,height],它表示添加到画布中的左下角坐标(x,y)以及宽度和高度

from matplotlib import pyplot as plt
import numpy as np
x=np.arange(10)
y=x **2
fig=plt.figure(figsize=(4,2),facecolor='g')
ax1=fig.add_axes([0,0,1,1])
#从画布20%的位置开始绘制,宽高是画布的50%
ax2=fig.add_axes([0.2,0.2,0.5,0.5])
plt.plot(x,y)
#区域.plot()
ax1.plot(x,y)
ax2.plot(x,y)
#展示图形
plt.show()

在这里插入图片描述
2.subplot()函数,均等划分画布

ax=plt.subplot(,,位置)
from matplotlib import pyplot as plt
import numpy as np
#划分分隔为两行一列,当前处于第一区域
plt.subplot(211)
x=np.arange(10)
y=x **2
plt.plot(x,y)
#划分分隔为两行一列,当前处于第二区域
plt.subplot(212)
y1=x+1
plt.plot(x,y1)
#展示图形
plt.show()

在这里插入图片描述
3.subplots()不仅创建包含子图区域的画布,又创建一个figure图形对象,而subplot()只是创建一个包含子图区域的画布

from matplotlib import pyplot as plt
import numpy as np
fig,axes=plt.subplots(2,2)
ax1=axes[0][0]
x=np.arange(1,5)
ax1.plot(x,x*x)
axes[0][1].plot(x,np.log10(x))
#展示图形
plt.show()

在这里插入图片描述

二、条形图

使用plt.bar(x,height,width:float=0.8,bottom=None,*,align:str='center',data=None)

参数含义
x数据类型为float类型,一般为np.arange()生成
heighty坐标值,float
width柱状图的高度,0-1之间
bottom柱状图的起始位置,y的起始坐标
align柱状图的中心位置
color颜色
alpha透明度,0-1
label设置后需调用plt.legend()生成
edgecolor/ec边框颜色
linewidth/lw边框宽度
tick_label柱子的刻度标签,字符串或字符串列表
linestyle/ls线条样式
from matplotlib import pyplot as plt
x=range(5)
data=[5,10,25,30,45]
plt.rcParams['font.sans-serif']=["SimHei"]
plt.title('柱状图')
plt.grid(ls='--',alpha=0)
plt.bar(x,data,color=['r','g','b'])
plt.show()

在这里插入图片描述

from matplotlib import pyplot as plt
x=range(5)
data=[5,10,25,30,45]
plt.rcParams['font.sans-serif']=["SimHei"]
plt.title('柱状图')
plt.grid(ls='--',alpha=0)
plt.bar(x,data,edgecolor='r',linestyle='--',linewidth=2)
plt.show()

在这里插入图片描述
1.同位置多柱状图

from matplotlib import pyplot as plt
import numpy as np
countries=['中国','美国','韩国']
plt.rcParams['font.sans-serif']=["SimHei"]
gold=[18,12,1]
silver=[3,1,2]
bronze=[13,2,3]
#得到横坐标列表
x=np.arange(len(countries))
width=0.2
gold_x=x
silver_x=x+width
bronze_x=x+width*2
#对应坐标,颜色,宽度
#横坐标会变
plt.bar(gold_x,gold,color='gold',width=width)
plt.bar(silver_x,silver,color='silver',width=width)
plt.bar(bronze_x,bronze,color='red',width=width)
#X轴向右移,值换成国家
plt.xticks(x+width,labels=countries)
plt.show()

在这里插入图片描述
2.堆叠柱状图

from matplotlib import pyplot as plt
import numpy as np
countries=['中国','美国','韩国']
plt.rcParams['font.sans-serif']=["SimHei"]
gold=np.array([18,12,1])
silver=np.array([3,1,2])
bronze=np.array([13,2,3])
x=np.arange(len(countries))
width=0.2
#横坐标对应国家,是bottom值是叠加
plt.bar(countries,gold,color='gold',bottom=bronze+silver,width=width)
plt.bar(countries,silver,color='silver',width=width,bottom=bronze)
plt.bar(countries,bronze,color='red',width=width)
plt.xticks(x,labels=countries)
plt.show()

在这里插入图片描述

三、水平条形图barth()

一、水平条形图条形图
barh()函数,和bar()函数类似,只是它使用y参数传入y轴数据,width传入条柱宽度数据

from matplotlib import pyplot as plt
import numpy as np
countries=['中国','美国','韩国']
plt.rcParams['font.sans-serif']=["SimHei"]
gold=np.array([8,2,1])
plt.barh(countries,width=gold)
plt.show()

在这里插入图片描述
1.堆叠

from matplotlib import pyplot as plt
import numpy as np
countries=['中国','美国','韩国']
plt.rcParams['font.sans-serif']=["SimHei"]
gold=np.array([18,12,1])
silver=np.array([3,1,2])
bronze=np.array([13,2,3])
width=0.2
#y坐标对应城市,然后需要依次向右移动
plt.barh(countries,gold,color='gold',left=bronze+silver,height=width)
plt.barh(countries,silver,color='silver',height=width,left=bronze)
plt.barh(countries,bronze,color='red',height=width)
plt.show()

在这里插入图片描述
2.多位置

from matplotlib import pyplot as plt
import numpy as np
countries=['中国','美国','韩国']
gold=np.array([18,12,1])
silver=np.array([3,1,2])
bronze=np.array([13,2,3])
width=0.2
y=np.arange(len(countries))
gold_y=gold
silver_y=silver+width
bronze_y=bronze+width*2
#y坐标,依次向上移,宽度也就是对应数量,设置颜色,高度就是设置条形图的宽度
plt.barh(y,gold_y,color='gold',height=width)
plt.barh(y+width,silver,color='silver',height=width)
plt.barh(y+2*width,bronze,color='red',height=width)
#y轴向右移,值换成国家
plt.yticks(y+width,countries)
plt.show()

在这里插入图片描述

四、直方图plt.hist()

又称质量分布图,是条形图的一种,由一系列高度不等的纵向线段来表示数据发
直方图用于概率分布,显示一组数值序列在给定数值范围内出现的概率(连续数据分布,一定顺序),而柱状图展示各个类别的频数(离散数据)

plt.hist()
表示和要求
x直方图所要用的数据,必须是一维数据;多维数组可以先进行扁平化再作图;必选参数
bins直方图的柱数,即要分的组数,默认为10
weights与x形状相同的权重数组;将x中的每个元家乘以对应权重值再计数;如果nomed或density取值为True,则会对权重进行归一化处理。这个参数可用于绘制已合并的数据的直方图
density布尔,可选。如果"True”,返回元组的第一个元素将会将计数标准化以形成一个概率密度,也就是说,直方图下的面积(或积分)总和为1。这是通过将计数除以数字的数量来实现的观察乘以箱子的宽度而不是除以总数数量的观察。如果相加也是"真实”的,那么柱状图被规范化为1。(替代normed)
bottom数组,标量值或None;每个柱子底部相对于y=0的位置。如果是标量值,则每个柱子相对于y=0向上/向下的偏移量相同。如果是数组,则根据数组元素取值移动对应的柱子:即直方图上下便宜距离
histype{'bar,'barstacked,'step,'stepiled”;"ba“是传统的条形直方图;"barstacked’是堆叠的条形直方图;'step’是未填充的条形直方图,只有外边框;‘stepiled"是有填充的直方图;当histype取值为’step’或’stepfiled’,ridth设置失效,即不能指定柱子之间的间隔,默认连接在一起
align{"let, mid, right};“left:柱子的中心位于bins的左边缘;'mid”:柱子位于bins左右边缘之间;right’:柱子的中心位于bins的右边缘;、color
label字符申(序列)或None;有多个数据集时,用label参数做标注区分
normed是否将得到的直方图向量归一化,即显示占比,默认为0,不归一化;不推荐使用,建议改用density参数:
edgecolor直方图边框颜色:
alpha透明度
from matplotlib import pyplot as plt
import numpy as np
x=np.random.randint(140,180,300)
plt.hist(x,bins=10,edgecolor='white')
plt.rcParams['font.sans-serif']=["SimHei"]
plt.title('数据统计')
plt.xlabel('身高')
plt.ylabel('比率')
plt.show()

在这里插入图片描述
在这里插入图片描述

from matplotlib import pyplot as plt
import numpy as np
x=np.random.randint(140,180,300)
num,bins,pathches=plt.hist(x,bins=10,edgecolor='white')
#num最上方值,bins柱状图起始值,
print(num,bins,pathches)
'''[23. 18. 27. 32. 47. 21. 32. 36. 29. 35.]
 [140.  143.9 147.8 151.7 155.6 159.5 163.4 167.3 171.2 175.1 179. ] 
<BarContainer object of 10 artists>'''
for p in pathches:
    print(p)
    '''Rectangle(xy=(140, 0), width=3.9, height=23, angle=0)
Rectangle(xy=(143.9, 0), width=3.9, height=18, angle=0)
Rectangle(xy=(147.8, 0), width=3.9, height=27, angle=0)
Rectangle(xy=(151.7, 0), width=3.9, height=32, angle=0)
Rectangle(xy=(155.6, 0), width=3.9, height=47, angle=0)
Rectangle(xy=(159.5, 0), width=3.9, height=21, angle=0)
Rectangle(xy=(163.4, 0), width=3.9, height=32, angle=0)
Rectangle(xy=(167.3, 0), width=3.9, height=36, angle=0)
Rectangle(xy=(171.2, 0), width=3.9, height=29, angle=0)
Rectangle(xy=(175.1, 0), width=3.9, height=35, angle=0)'''
plt.rcParams['font.sans-serif']=["SimHei"]
plt.title('数据统计')
plt.xlabel('身高')
plt.ylabel('比率')
plt.show()

在这里插入图片描述

五、饼状图

显示一个数据系列中各项目的占项目总和的百分比

plt.pie(x,explode=None,labels=None,colors=None,autopct=None)
含义
xx:数组序列,数组元素对应扇形区域的数量大小
labels列表字符串序列,为每个扇形区域备注一个标签名字
colors为每个扇形区域设置颜色,默认按照颇色周期自动设置。
autopct格式化字符串"mt%pc!",使用百分比的格式设置每个扇形区的标签,并将其放置在扇形区内
pctdistance设管百分比标签与圆心的距离;
labeldistance设置各扇形标签(图例)与圆心的距离;
explode指定饼图某些部分的突出显示,即呈现炸式
shadow是否添加饼图的阴影
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif']=["SimHei"]
#定义饼的标签
labels=['娱乐','育儿','饮食','房贷','交通','其它']
#每个标签的数量
x=[200,500,1200,700,200,900]
plt.title('饼状图')
#数据,标签,每个区域的颜色,显示百分比
plt.pie(x,labels=labels,colors=['red','blue','yellow','green','gray'],autopct='%.2f%%')
plt.show()

在这里插入图片描述

饼状图的分离
explode:指定突出部分

from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif']=["SimHei"]
labels=['娱乐','育儿','饮食','房贷','交通','其它']
x=[200,500,1200,700,200,900]
plt.title('饼状图')
#设置每一块距离圆心的位置,值是百分比
explode=[0.03,0.05,0.06,0,0.08,0.1]
plt.pie(x,labels=labels,colors=['red','blue','yellow','green','gray'],autopct='%.2f%%',explode=explode)
plt.show()

在这里插入图片描述

设置饼状图百分比和文本距离中心位置
pctdistance:设管百分比标签与圆心的距离;
labeldistance:设置各扇形标签(图例)与圆心的距离

from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif']=["SimHei"]
#定义饼的标签
labels=['娱乐','育儿','饮食','房贷','交通','其它']
#每个标签的数量
x=[200,500,1200,700,200,900]
plt.title('饼状图')
explode=[0.03,0.05,0.06,0,0.08,0.1]
colors=['red','blue','yellow','green','gray']
#设置标签到圆心的距离,百分比到圆心的距离
plt.pie(x,labels=labels,colors=colors,autopct='%.2f%%',explode=explode,labeldistance=1.3,pctdistance=1.2)
plt.show()

在这里插入图片描述

六、散点图

数据以点的形式展现在坐标系
可以推断出变量的相关性

plt.scatter(x,y)
含义
x,y散点的坐标
s散点的面积
c散点的颜色(默认信为蓝色,"b’,其余颜色同plt.plot( ))
marker散点样式(默认估为实心圆,o’,其余样式同plt.plot())
alpha散点透明度([0,1]之间的数,0表示完全透明,1则表示完全不透明)
linewidths散点的边缘线宽
edgecolors散点的边缘颜色
cmapColomap,默认 None,标量或者是一个 colormap 的名字,只有c是一个浮点数数组的时才使用
from matplotlib import pyplot as plt
import numpy as np
x=np.array([1,2,3,4,5,6,7,8])
y=np.array([1,4,9,16,7,11,23,18])
s=np.random.rand(8)*20
colors=np.random.rand(8)
#指定点的大小,颜色
plt.scatter(x,y,s=s,c=colors)
plt.show()

在这里插入图片描述

from matplotlib import pyplot as plt
import numpy as np
x=np.random.rand(100)
y=np.random.rand(100)
colors=np.arange(1,101)
#指定点的大小,颜色
plt.scatter(x,y,c=colors,cmap='Blues')
plt.show()

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值