Python第14章复习笔记(Matplotlib)

14.1 认识Matplotlib

  • Matplotlib 是 Python 中的数据可视化软件包之一,支持跨平台运行,它是Python常用的 2D 绘图库,同时它也提供了一部分3D绘图接口,Matplotlib通常与NumPy、Pandas一起使用,是数据分析中不可或缺的重要工具之一

  • 通过 Matplotlib,我们可以仅需要几行代码,便可以生成图表、直方图、柱状图、饼状图、散点图等

  • Matplotlib安装:pip install matplotlib

首先导入matplotlib包中的pyplot模块,并以as别名的形式简化引入包的名称
from matplotlib import pyplot as plt

因为要经常用到numpy里面的方法,所以我们也需要导入numpy包
import numpy as np

14.2 基本图形绘制

14.2.1 入门案例

在绘图时,需要一个Figure对象,可以理解成需要一张画布才能开始绘图。

画布设置:
plt.figure(num, figsize, dpi, facecolor)

  • num:图像编号或名称,数字为编号 ,字符串为名称
  • figsize:指定figure的宽和高,单位英寸
  • dpi:图形分辨率,每英寸多少像素
  • facecolor:背景颜色

示例:绘制抛物线

#首先导入matplotlib包中的pyplot模块,并以as别名的形式简化引入包的名称
from matplotlib import pyplot as plt
#引入numpy包
import numpy as np
#画布设置,默认画布大小大概是6.4*4.8
fig = plt.figure(num= '抛物线',figsize=(6,4), dpi=100, facecolor='grey')
#绘制抛物线
x = np.arange(-20,21)
y = x ** 2
#plot()绘制线性图表
plt.plot(x,y)
plt.show()

结果如下:
请添加图片描述

14.2.2 plot参数解析

plot是Matplotlib中用于绘制线形图的函数,它有多个参数可以控制绘图的各个方面。以下是常用的一些参数及其作用
plot(x, y, color, linestyle, marker, markersize, markerfacecolor, alpha)

  • x,y:必须参数,x,y轴数据的列表或数组
  • color:线条的颜色
  • linestyle:线条的样式
  • marker :绘图点的标记样式
  • markersize:设置标记的大小
  • markerfacecolor:设置标记的颜色
  • alpha:设置线条的透明度

linestyle部分线条样式取值
在这里插入图片描述
marker 样式取值
在这里插入图片描述
示例:

from matplotlib import pyplot as plt
import numpy as np
#plot()属性设置
x = np.arange(-20,21)
y = x ** 2
plt.plot(x, y, color = 'red', linestyle = '--', marker = 'D',markersize = 5, markerfacecolor = 'green',alpha = 0.9)
plt.show()

结果如下:
请添加图片描述
color(颜色属性)

  • 全称:red,blue,yellow,green
  • 缩写:b(蓝色),g(绿色),r(红色),c(青色),m(品红),y(黄色),k(黑色),w(白色)
  • 十六进制:黑色:#000000,白色:#ffffff,红色:#ff0000,绿色:#00ff00,蓝色:#0000ff,黄色:#ffff00

1、使用全称

from matplotlib import pyplot as plt
import numpy as np
#全称
x = np.arange(-20,21)
y = x ** 2
plt.plot(x, y, color = 'red')
plt.show()

结果如下:
请添加图片描述
2、使用缩写

from matplotlib import pyplot as plt
import numpy as np
#缩写
x = np.arange(-20,21)
y = x ** 2
plt.plot(x, y, color = 'g')
plt.show()

结果如下:
请添加图片描述
3、使用十六进制

from matplotlib import pyplot as plt
import numpy as np
#十六进制
x = np.arange(-20,21)
y = x ** 2
plt.plot(x, y, color = '#0000ff')
plt.show()

结果如下:
请添加图片描述

14.2.3 基本方法

1、标题
plt.title(label, loc, fontsize, color)

  • label:标题
  • loc:位置
  • fontsize:文字大小
  • color:颜色

标题不支持中文
要显示中文,字体为中文黑体
plt.rcParams[‘font.sans-serif’] = ‘SimHei’
其他字体(‘Kaiti’:中文楷体,‘Lisu’:中文隶书,‘STSong’:华文宋体等)

当字体设置支持中文后,必须设置负号,否则当数值中出现负号时无法显示
让图片中可以显示负号
plt.rcParams[‘axes.unicode_minus’] = False

示例:

from matplotlib import pyplot as plt
import numpy as np
#标题title()
x = np.arange(-20,21)
y = x ** 2
plt.title('y = x^2', loc='center', fontsize = 20, color = 'red')
plt.plot(x,y)
plt.show()

结果如下:
请添加图片描述
示例:

from matplotlib import pyplot as plt
import numpy as np
x = np.arange(-20,21)
y = x ** 2
plt.title('y等于x的平方', loc='center', fontsize = 20, color = 'red')
plt.rcParams["font.sans-serif"] = 'SimHei'
plt.rcParams["axes.unicode_minus"] = False
plt.plot(x,y)
plt.show()

结果如下:
请添加图片描述
2、坐标轴
坐标轴名称
plt.xlabel(label, fontsize, rotation)
plt.ylabel(label, fontsize, rotation)

  • label:标题
  • fontsize:文字大小
  • rotation:旋转角度

示例:

from matplotlib import pyplot as plt
import numpy as np
#坐标轴名称
x = np.arange(-20,21)
y = x ** 2
plt.plot(x,y)
#x轴默认旋转角度是0度
plt.xlabel('x轴', fontsize = 15)
#y轴默认旋转角度是90度
plt.ylabel('y轴', fontsize = 15)
plt.title('y等于x的平方', fontsize = 15)
plt.show()

结果如下:
请添加图片描述坐标轴范围
plt.xlim(left, right)
plt.ylim(left, right)

示例:

from matplotlib import pyplot as plt
import numpy as np
#坐标轴范围
x = np.arange(-20,21)
y = x ** 2
plt.plot(x,y)
#设置x轴范围
plt.xlim(-10,10)
#设置y轴范围
plt.ylim(0,100)
plt.show()

结果如下:
请添加图片描述
坐标轴刻度
plt.xticks(ticks, labels, rotation, fontsize, color)

  • ticks:指定刻度的位置
  • labels:指定刻度标签的文本
  • rotation:指定刻度标签的旋转角度
  • fontsize:指定刻度标签的字体大小
  • color:指定刻度标签的字体颜色

示例:

from matplotlib import pyplot as plt
import numpy as np
#坐标轴刻度
x = np.linspace(0, 10)
y = np.sin(x)
plt.plot(x,y)
# 设置x轴y轴刻度
plt.xticks(np.arange(0, 11))
plt.yticks(
    ticks=[-1,0,1],  # 刻度位置 
    labels=[-1,0,1],  # 刻度标签
    rotation=45,  # 标签旋转角度
    fontsize=12,  # 标签字体大小
    color='blue'  # 标签颜色
)
plt.show()

结果如下:
请添加图片描述
坐标轴的操作:plt.gca() 和ax.spines()

  • plt.gca() 是 Matplotlib 库中的一个函数,用于获取当前的 Axes 对象。Axes对象表示一个绘图区域,包含了坐标轴、刻度线、标签等元素。通过获取 Axes 对象,可以对其进行进一步的配置和修改。
  • ax.spines() 是一个用于获取或设置 Axes对象的四条边框线的函数。这四条边框线分别是上、下、左、右四条边,它们定义了坐标轴的范围。通过set_color()方法来设置颜色,通过set_position() 方法来改变边框的位置。

示例:

from matplotlib import pyplot as plt
import numpy as np
#对坐标轴的操作gca(),gca get current axes获取当前的轴
x = np.arange(-20,21)
y = x ** 2
#获取当前坐标轴
ax = plt.gca()
#通过坐标轴spines,确定top,bottom,left,right
#不需要右侧和上侧线条,则可以设置它的颜色为none
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
#移动左轴到指定距离,axes:0.0-1.0之间的值,整个轴上的比例
ax.spines['left'].set_position(('axes',0.5))
#移动下轴到指定位置,data表示按数值挪动,其后数字代表挪动到y轴的刻度值
ax.spines['bottom'].set_position(('data',0.0))
plt.plot(x,y)
plt.show()

结果如下:
请添加图片描述

14.2.4 图例legend()

当我们绘制多个图形时,通过在图例中标注每个图形的含义,可以让读者更容易理解图表。
legend(list, loc, fontsize, ncol)

  • loc:控制图例位置,常见’left’,’upper
  • right’,’lower left’,’center left’等
  • fontsize:图例的字体大小
  • ncol:图例展示为几列,默认展示为1列

示例:

from matplotlib import pyplot as plt
import numpy as np
#图例legend()
x = np.linspace(0, 2*np.pi)
plt.plot(x, np.sin(x))  # 正弦曲线
plt.plot(x, np.cos(x))  # 余弦曲线
#图例,位置左下,显示两列
plt.legend(['Sin','Cos'], fontsize=12, loc='lower left')
plt.show()

结果如下:
请添加图片描述

14.2.5 网格grid()

grid(b, axis, linestyle, color, linewidth)

  • b:布尔值,控制是否显示网格线。默认是True。
  • axis:指定要绘制网格线的轴。可以是’both’(默认值)、‘x’ 或 ‘y’。
  • color:设置网格线的颜色。
  • linestyle(ls):设置网格线的线型,如 ‘-’、‘:’、‘–’ 等。
  • linewidth (lw):设置网格线的线宽。

示例:

from matplotlib import pyplot as plt
import numpy as np
#网格grid()
x = np.linspace(0, 10)
y = np.sin(x)
plt.plot(x,y)
#网格线设置,网格线样式为虚线,线宽0.5,颜色灰色,显示y轴
plt.grid(ls='--', lw=0.5, c='grey', axis='both')
plt.show()

结果如下:
请添加图片描述

14.2.6 文本text()

使用text函数可以在图表中添加文字标注,从而更好地解释和说明数据。
text(x, y, s, fontsize, color)

  • x:为文本显示的横坐标。
  • y:为文本显示的纵坐标。
  • s:为显示内容。

示例:

from matplotlib import pyplot as plt
import numpy as np
#文本text()
x = np.linspace(0, 10, 10)
y = np.array([60, 30, 20, 90, 40, 60, 50, 80, 70, 30])
plt.plot(x, y, ls='--', marker='o')
#文本
for a, b in zip(x, y):
    #文本设置
    plt.text(x=a + 0.2, y=b + 0.3, s=b, fontsize=14, color='r')
plt.show()

结果如下:
请添加图片描述

14.3 多图布局

我们有时候需要在一张画布中分别绘制多个图形,方便我们进行观察,效果如下
在这里插入图片描述

14.3.1 均匀分布subplot()函数

subplot(a, b, c)

  • a:是subplot的行数
  • b:是subplot的列数
  • c:是subplot中子图的序号

注意:区域对象的方法很多都是set_开头

示例:

from matplotlib import pyplot as plt
import numpy as np
#subplot()函数
x = np.linspace(-np.pi, np.pi)
y = np.sin(x)
z = np.cos(x)
# 子图1,2行1列的第1个子视图
axes1 = plt.subplot(2,1,1)
axes1.plot(x, y)
axes1.set_title('子图1')
# 子图2,2行1列的第2个子视图
axes2 = plt.subplot(2,1,2)
axes2.plot(x, z)
axes2.set_title('子图2')
#使用light_layout()消除子图标题重叠
plt.tight_layout()
plt.show()

结果如下:
请添加图片描述

14.3.2 不均匀分布

示例:

from matplotlib import pyplot as plt
import numpy as np
#不均匀分布
x = np.linspace(-np.pi, np.pi)
y = np.sin(x)
# 子图1,2行2列的第1个子图区域
axes1 = plt.subplot(2, 2, 1)
axes1.plot(x, y, color='red')
axes1.set_title('子图1')
# 子图2,2行2列的第2个子图区域
axes2 = plt.subplot(2, 2, 2)
axes2.plot(x, y, marker = '*')
axes2.set_title('子图2')
# 子图3,2行1列的第2个子图区域
axes3 = plt.subplot(2, 1, 2)
axes3.plot(x, np.sin(x*x))
axes3.set_title('子图3')
plt.tight_layout()
plt.show()

结果如下:
请添加图片描述

14.3.3 图形嵌套

add_subplot函数

示例:

from matplotlib import pyplot as plt
import numpy as np
#图形嵌套
fig = plt.figure()
# 使用add_subplot()函数,必须先创建一个figure对象
# 图1
axes1 = fig.add_subplot(111)
#如果只提供一个列表或数组,则默认为y轴的值,x轴的值为该列表或数组的索引。
axes1.plot([1, 3])
# 图2
axes2 = fig.add_subplot(221)
axes2.plot([1, 3])
# 图3
axes3 = fig.add_subplot(224)
axes3.plot([1, 3])
plt.show()

结果如下:
请添加图片描述
图1占用整个画布绘制
图2,3将画布分为2行2列,将位置1,4用来绘制图形

14.3.4 subplots()函数

subplots()函数与subplot()函数相似,不同之处是,subplots()既创建了一个包含子图区域的画布,又创建了一个figure对象,而subplot()只是创建了一个包含子图的画布。

返回的axes对象是一个包含所有子图的一个数组

示例:

from matplotlib import pyplot as plt
import numpy as np
#subplots()函数
fig,axes =plt.subplots(2,2)
x = np.arange(1,5)
#第一个区域ax1
ax1 = axes[0][0]
#绘制平方函数
ax1.plot(x, x*x)
ax1.set_title('square')
#绘制平方根图像
axes[0][1].plot(x, np.sqrt(x))
axes[0][1].set_title('square root')
#绘制指数函数
axes[1][0].plot(x, np.exp(x))
axes[1][0].set_title('exp')
#绘制对数函数
axes[1][1].plot(x, np.log10(x))
axes[1][1].set_title('log')
plt.tight_layout()
plt.show()

结果如下:
请添加图片描述

14.4 常用图形

14.4.1 柱状图 bar()

bar(x, height, width, bottom, color, alpha)

  • height:表示柱状图的高度,也就是y坐标值,数据类型为float类型,一般为一个列表,包含生成柱状图的所有y值
  • width:表示柱状图的宽度,取值在0~1之间,默认值为0.8
  • bottom:柱状图的起始位置,也就是y轴的起始坐标,默认值为None
  • color:柱状图颜色,默认为蓝色
  • alpha:透明度,取值在0~1之间,默认值为1

示例:

from matplotlib import pyplot as plt
import numpy as np
#柱状图 plt.bar()
x = ['语文', '数学',  '英语', 'Python', '化学']
y = [20, 10, 40, 60, 10]
plt.bar(x, y, alpha = 0.5, color = 'green')
plt.show()

结果如下:
请添加图片描述
1、堆叠柱状图
示例:

from matplotlib import pyplot as plt
import numpy as np
#堆叠柱状图
#国家
countries = ['挪威','德国','中国','美国','瑞典']
#金牌个数
#使用numpy里的array函数将列表转换成数组
gold_medal = np.array([16,12,9,8,8])
#银牌个数
silver_medal = np.array([8,10,4,10,5])
#铜牌个数
bronze_medal = np.array([13,5,2,7,5])
#绘制图形
plt.bar(countries,gold_medal,bottom=bronze_medal+silver_medal,color = 'gold',width=0.2)
plt.bar(countries,silver_medal,bottom=bronze_medal,color = 'silver',width=0.2)
plt.bar(countries,bronze_medal,color = 'saddlebrown',width=0.2)
plt.show()

结果如下:
请添加图片描述
2、多位置柱状图
同一x轴位置绘制多个柱状图,主要通过调整柱状图的宽度和每个柱状图x轴的起始位置

示例:

from matplotlib import pyplot as plt
import numpy as np
#多位置柱状图
countries = ['挪威','德国','中国','美国','瑞典']
gold_medal = [16,12,9,8,8]
silver_medal =[8,10,4,10,5]
bronze_medal =[13,5,2,7,5]
#将x轴转换为数值
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_medal,width=width,color = 'gold',label = '金牌')
plt.bar(silver_x,silver_medal,width=width,color = 'silver',label = '银牌')
plt.bar(bronze_x,bronze_medal,width=width,color = 'saddlebrown',label = '铜牌')
plt.legend(loc = 'upper right')
# #x标签的位置居中
plt.xticks(x+width,labels=countries)
plt.show()

结果如下:
请添加图片描述

14.4.2 直方图hist()

hist(x, bins, color, edgecolor, orientation, stacked)

  • bins:指定直方图的箱体数量或箱体的边界值。默认值为10
  • color :箱体颜色
  • edgecolor: 直方图边缘的颜色
  • orientation:直方图的方向,可以是’vertical’(垂直,默认)或 ‘horizontal’。
  • stacked:默认为False,是否为堆积状图

示例:

from matplotlib import pyplot as plt
import numpy as np
#直方图plt.hist()
#使用numpy随机生成100个随机数据
x = np.random.randint(0, 11, 100)
#绘制图形,bins=5则代表绘制5个箱体,
plt.hist(x, bins=5)
plt.show()

结果如下:
请添加图片描述
示例:

from matplotlib import pyplot as plt
import numpy as np
x = np.random.randint(0, 11, 100)
#然后指定各个区间的范围,[0,2),[2,4),[4,6),[6,8),[8,10)
plt.hist(x, bins=[0, 2, 4, 6, 8, 10],edgecolor='white')
plt.show()

结果如下:
请添加图片描述
堆叠直方图,多类型直方图
示例:

from matplotlib import pyplot as plt
import numpy as np
#堆叠直方图,多类型直方图
#准备三组组数据:
x_value = np.random.randint(140,180,100)
x2_value = np.random.randint(140,180,100)
x3_value = np.random.randint(140,180,100)
#以列表的形式传入三组数据,设置直方图的stacked为True,允许数据覆盖,默认为False
plt.hist([x_value,x2_value,x3_value],bins = 10, stacked= False,edgecolor = 'white')
plt.show()

结果如下:
请添加图片描述

14.4.3 饼状图 pie()

pie(x, autopct, explode, shadow, labeldistance, pctdistance)

  • x:浮点型数组或列表,用于绘制饼图的数据,表示每个扇形的面积
  • autopct:用于在饼图中显示每个扇形的百分比值:%.2f,小数点后保留两位,%.2f%%,显示百分比符号
  • explode :指定哪些扇形要凸出显示
  • shadow :布尔值,是否在饼图下面添加阴影
  • labeldistance:表示的各扇形区域标签与圆心的距离
  • pctdistance:表示百分比与圆心的距离

示例:

from matplotlib import pyplot as plt
import numpy as np
#饼状图plt.pie()
#定义饼每个区域的标签
labels = ['娱乐','育儿','饮食','房贷','交通','其他']
#每个标签所占的数量
x = [200,500,1200,7000,200,900]
#绘制饼状图,x是一个列表,列表元素对应扇形区域的数量大小,labels为每个区域设置一个标签
plt.pie(x,labels= labels,autopct='%.2f%%')
plt.show()

结果如下:
请添加图片描述

示例:

from matplotlib import pyplot as plt
import numpy as np
#饼状图plt.pie()
labels = ['娱乐','育儿','饮食','房贷','交通','其他']
x = [200,500,1200,7000,200,900]
# #饼状图的分离 explode:指定饼图某些部分的突出显示,距离圆心的距离
explode = [0.03,0.05,0.06,0.04,0.08,0.1]
#设置阴影图,labeldistance表示的各扇形区域标签与圆心的距离,pctdistance表示百分比与圆心的距离
plt.pie(x,labels= labels,autopct='%.2f%%',explode = explode,
        shadow= True,labeldistance= 1.35,pctdistance= 1.2)
plt.show()

结果如下:
请添加图片描述

14.4.4 散点图 scatter()

scatter(x, y, s , c , cmap)

  • x,y:散点坐标
  • s:散点面积大小
  • c:散点颜色
  • cmap:颜色条,默认None,标量或者是一个colormap的名字,只有c是一个浮点数数组的时才使用

示例:

from matplotlib import pyplot as plt
import numpy as np
#散点图plt.scatter()
#x轴数据
x = [1,2,3,4,5,6,7,8]
#y轴数据
y = [1,4,9,16,7,11,23,18]
#绘制散点图
plt.scatter(x,y,s = 10)
plt.show()

结果如下:
请添加图片描述

14.4.5 自定义颜色

在这里插入图片描述
在这里插入图片描述
示例:

from matplotlib import pyplot as plt
import numpy as np
#自定义点的颜色
#x轴数据
x = np.random.rand(10)
print(x)
#y轴数据
y = np.random.rand(10)
print(y)
#生成一个浮点数或N维浮点数组
s = (30 * np.random.rand(10)) ** 2
print(s)
#颜色随机
colors = np.random.rand(10)
print(colors)
plt.scatter(x,y,s,c = colors,cmap= 'magma')
#colorbar() 函数设置了色卡
cbar = plt.colorbar()
plt.show()
#运行结果
[0.68830197 0.72804179 0.05401797 0.6432706  0.60768534 0.8827824
 0.87120781 0.52231624 0.73000955 0.63951085]
[0.47941975 0.97585361 0.53586238 0.29329211 0.16935829 0.56105792
 0.1549289  0.63040406 0.07032587 0.3225049 ]
[  9.41892394 388.20080094 142.99355291 768.99770947 524.46896218
  62.02178115 103.58772876 129.95547109 285.40665899 383.17334544]
[0.21522527 0.81219198 0.56988226 0.08500541 0.42731529 0.63041104
 0.18757102 0.03408038 0.51884646 0.92454706]

结果如下:
请添加图片描述

  • 29
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

The square of H

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

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

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

打赏作者

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

抵扣说明:

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

余额充值