Matplotlib-----pyplot基本用法

本文详细介绍Matplotlib库的基本用法,包括线形图、柱形图、直方图、点图、饼图和混淆矩阵的绘制技巧。通过实例演示如何调整图形属性,如颜色、标记和线型,以及如何解决中文显示问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Pyplot简介

Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形 。通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。简单的说就是把数据显示成图形用的,比如曲线,棒图,饼图,总之就是数据可视化。

Pyplot的一些方法

方法说明
figure()创建画布有返回值,重要参数dpi分辨率,figsize画布大小
xlabel(),ylabel()通过plt.ylabel(‘纵轴名’)指定轴的名称
plot()线形图
axis()参数是 [xmin, xmax, ymin, ymax] 列表作为参数来指定了各个轴的视口大小
show()展示方法,展示之后会清空内存中图片,因此要先保存图片再show
savefig()保存图片参数是保存路径和文件名
legend()函数主要的作用就是给图加上图例,plt.legend([x,y,z])里面的参数使用的是list的的形式将图表的的名称喂给这和函数。
plt.xticks(bins)xticks(list) 使用list的值进行 x 轴刻度的标识
title()标题
grid()设置为true添加网图格plt.grid(True, linestyle=’–’, alpha=0.5)

解决不支持中文

  • 单个解决方式,以y轴名为例
from matplotlib.font_manager import FontProperties

plt.ylabel('平方值',fontproperties=FontProperties(fname='/System/Library/Fonts/PingFang.ttc'))
  • 当前文件解决方式
# 修改字体
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
plt.rcParams['font.size'] = 20  # 修改字体大小
plt.rcParams['axes.unicode_minus'] = False  # 字体是中文时显示负数会有bug,去除一下

  • jupyternotebook可能出现问题
    可能会不展示图,加上以下代码即可
%matplotlib inline

线形图plot

ef plot(*args, scalex=True, scaley=True, data=None, **kwargs):
  • 在plot()中有个格式化字符串fmt可以来指定线的由颜色、标识符和线型三部分,默认是’b-'也就是蓝色实线
  • plot的参数:color线颜色,marker标记格式,markerfacecolor标记颜色,markersize标记大小, linestyle线格式
fmt = '[color][marker][line]'

举个栗子

plt.ylabel('平方值',fontproperties=FontProperties(fname='/System/Library/Fonts/PingFang.ttc'))
arr1 = np.arange(0,5)
plt.axis([0,6,0,20])  # 指定了x和y轴最大最小值
plt.plot(arr1, arr1**2, 'r<--')  # fmt格式指定为红色线段,<标记点,虚线格式
plt.show()
  • 如果只有一个数组,这个数组默认为y轴内容,x轴自动补齐由0开始
  • axis指定了x和y轴的值范围,不然就是默认数组的值范围
  • ’r<–‘,r是红色,<指标记点格式,–是指定虚线

在这里插入图片描述

使用fmt格式字符串

缩写字母代表颜色标记缩写代表的标记格式
‘b’blue‘.’点标记
‘g’green‘,’像素标记也就是默认
‘r’red‘o’大点标记
‘c’cyan’v‘ ‘^’ ‘<’ ‘>’分别是三角形标记的四个方向
‘m’magenta‘s’正方形
‘y’yellow‘p’五角形
‘k’black‘*’五角星
‘w’white‘H’ ‘h’两个方向的六边形
--‘1’ ‘2’ ‘3’ ‘4’三菱线的四个方向
字符代表的线型‘+’+型
‘-’普通线型‘x’x型
‘–’- -虚线‘d’ ‘D’d是菱形,D是倒正方形
‘-.’- .虚线""
‘:’. .虚线‘_’下划线型

add_subplot绘制子图(分区域)

第一种方法:生成对象在绘图

# 创建画布,参数dpi分辨率,figsize画布大小
fig = plt.figure()
# 分成多少块,第三个参数是指定第几块
ax1 = fig.add_subplot(2,2,1)  # 2*2,选第一个
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,3)
ax4 = fig.add_subplot(2,2,4)
# 用这些ax1-4对象的plot方法绘制内容即可
arr2 = list(data['price'])  # data是读取的文件内容,这里没展示
arr3 = list(data['AREA'])
# 面积和价格,第四区域
ax4.plot(arr3,arr2, 'ro')**加粗样式**

第二种方法,分割直接写


fig = plt.figure()
arr1 = np.random.randint(10,20,20)
arr2 = np.random.randint(10,20,20)
# 2行3列的第一个区域
fig.add_subplot(2,3,1)  # 不用逗号也一样
plt.plot(arr1)
fig.add_subplot(235)  # 2行3列的第5个区域
plt.plot(arr2)
plt.show()

柱形图bar的用法

常见的参数:

  • x,height分别是x轴和y轴的值
  • width是宽度
  • label是说明,需要显示图例lengend()方法
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']  # 中文
x = np.arange(5)
y1 = np.random.randint(10,100,5)
y2 = np.random.randint(10,100,5)
fig = plt.figure()
# fig.add_subplot(1,2,1)
# 指定x,y的值
plt.bar(x, y1,width=0.4,label='第一组')
# fig.add_subplot(1,2,2)
plt.bar(x+0.4,y2,width=0.4,label='第二组
# 显示图例
plt.legend()
plt.show()

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

直方图hist用法

几个常见的参数

  • x,这个参数是指定每个bin(箱子)分布的数据,对应x轴
  • bins这个参数指定bin(箱子)的个数,也就是总共有几条条状图
  • density这个参数指定密度,也就是每个条状图的占比例比,默认为1
  • alpha透明度
arr1 = [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,]

plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
plt.rcParams['font.size'] = 20  # 修改字体大小
plt.rcParams['axes.unicode_minus'] = False  # 字体是中文时显示负数会有bug,去除一下
# 展示刻度
plt.xticks(range(min(arr1), max(arr1))[::4]) 
# 个数
bins = (max(arr1) - min(arr1)) // 4
print(bins)
plt.hist(arr1, bins=bins, density=1, alpha=0.8)
plt.grid(True, linestyle="--", alpha=0.5)
plt.ylabel('数量')
plt.title('直方图')
plt.show()

在这里插入图片描述

绘点图scatter用法

  • scatter(x, y, 点的大小, 颜色,标记),默认顺序
  • 参数c指定颜色可以是字符缩写也可以是数组会自动对应,s指定大小
    两个案例:
plt.scatter(arr1,arr1**2,[10,20,30,40,50],['r','b','y','k','c'])

在这里插入图片描述

  • Matplotlib 允许用户提供带有关键字的数据对象作为参数,一旦提供了带有关键字的数据,就能够直接使用关键字来代替这些变量去生成图形。
data = {'a': np.arange(50),
        'c': np.random.randint(0, 50, 50),
        'd': np.random.randn(50)}
data['b'] = data['a'] + 10 * np.random.randn(50)
data['d'] = np.abs(data['d']) * 100
# 指定颜色和大小,数据
plt.scatter('a', 'b', c='c', s='d', data=data)
plt.show()

在这里插入图片描述

饼图pie的使用

  • x:数量,自动算百分比
  • labels:每部分名称,长度和x要一样
  • explode:1就是把饼图拿出来,[1,0,…]列表长度要和x一样
  • autopct:占比显示指定%1.2f%%
  • colors:每部分颜色,列表,可以自定[‘b’,‘r’,‘g’,‘y’,‘c’,‘m’,‘y’,‘c’,‘g’,‘y’]也可以自动填色
  • shadow等于True加阴影
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
# 准备数据
movie_name = ['雷神3:诸神黄昏','正义联盟','东方快车谋杀案','寻梦环游记','全球风暴','降魔传','追捕','七十七天','密战','狂兽','其它']
place_count = [60605,54546,45819,28243,13270,9945,7679,6799,6101,4621,20105]
# 展示
plt.pie(place_count, labels=movie_name,autopct="%1.2f%%")
# 显示图例
plt.legend()
# 添加标题
plt.title("电影排片占比")
# 规定为正圆
plt.axis('equal')
plt.show()

在这里插入图片描述

混淆矩阵imshow(表示二维数据的分布情况)

arr1 = np.random.randint(10,50,(10,20))
plt.imshow(arr1)  # 混淆矩阵 cmap=plt.cm.Blues颜色风格
plt.colorbar()  # 颜色和值对应图
plt.show()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值