一、matplotlib学习

本文详细介绍了如何使用matplotlib库在Python中绘制折线图,包括设置标题、坐标轴标签、自定义刻度、在JupyterNotebook中实现交互功能、添加图例、绘制网格、操作坐标轴、创建图形对象以及保存图片等步骤。
摘要由CSDN通过智能技术生成

1.1 matplotlib绘制折线图

x = np.arange(-50, 51)
y=x**2
plt.plot(x, y)

1.2 设置标题

# plt.rcParams['font.sans-serif']=['kaiti']# 默认不支持中文
# plt.rcParams['axes.unicode_minus']=False# 修改轴中的符号编码
plt.title('y=x的平方')# 1、设置标题

1.3 设置坐标轴的标签

# 修改x和y轴的名称
plt.xlabel('x/个')
plt.ylabel('y/元')

1.4 设置刻度(自定义坐标轴)

# 设置刻度
# ticks表示原本的坐标轴位置
# labels表示在图中需要显示的新的标签
# rotation代表标签旋转
plt.xticks(ticks=[-40,-30,-20,-10,0,10,20,30,40],
           labels=['大约-40','大约-30','大约-20','大约-10','大约0','大约10','大约20','大约30','大约40'],
           rotation = 45)

1.5 在jupyter notebook中使用魔术方法实现交互功能

%matplotlib notebook

 1.6 在jupyter中实现图例

只需要在调用Plot函数时写明一个label,调用legend时会自动显示图例

plt.plot(x,y1,label='y=x**2')
plt.plot(x,y2,label='y=x*2+1')
plt.legend()

1.7 设置指定点的数据

# 在图中的0,0点就会显示一段说明文字
plt.text(0,0,'(0,0)')

1.8 绘制网格

plt.grid(True,axis='x')

1.9 坐标轴操作

# plt.gca()-->get current axes
import torch
%matplotlib notebook
x=torch.tensor(range(-50,51))
y=x**2
plt.plot(x,y)

# 获得当前的轴
axes=plt.gca()
axes.spines['right'].set_color('b')
# 左边的轴只能左右移动,set_position的参数是一个元组,’data'表示移动到数据0,'axes'表示在坐标轴上移动的比例
axes.spines['left'].set_position(('data',0))
# axes.spines['bottom'].set_position(('axes',0.1))

1.10 设置坐标轴的范围

plt.ylim(0,2500)

1.11 创建图形对象,不均匀画布

# 创建图形对象
fig=plt.figure(figsize=(7,7),dpi=60)
#           [left,bottom,width,height]往右上绘图
axes1=fig.add_axes([0,0,0.3,0.3])
axes1.plot([1,2,3],[2,3,5])

axes2=fig.add_axes([0.2,0.2,0.1,0.1])
axes2.plot([1, 2, 3], [5, 4, 5])

1.12 创建多个画布

%matplotlib notebook
# plt会默认创建第一个画布
plt.plot([1,2,3,4])
# 新建一个画布
fig = plt.figure(figsize=(7, 7))
fig.add_subplot(1,1,1)
plt.plot([1,2],[2,3])
fig.add_subplot(2,2,1)
plt.plot([1,2],[2,3])

1.13 图形重叠

# 设置多图的基本信息方式
%matplotlib notebook
plt.subplot(211,title='pic1',xlabel='x axis')
plt.plot(range(6))
plt.subplot(212,title='pic2',xlabel='y axis')
plt.plot(range(5))
# 不调用tight_layout()会坐标轴很挤
# plt.tight_layout()
plt.show()

1.14 绘制多图的基本方式

plt.show()
#%%
%matplotlib notebook
# 绘制多图基本方式
# 在画布中绘制第一个区域
ax1 = plt.subplot(1, 2, 1)
# 在画布中绘制第二个区域
ax2 = plt.subplot(1, 2, 2)

# 对第一个画布进行操作
ax1.plot(range(4))

# 对第二个画布进行操作
ax2.plot([1,2,3],[2,5,3])

1.15 subplots

一次性直接将一个画布划分成了nrows*ncols个区域,并且返回画布fig和axes区域集合,可以通过索引方式直接得到指定的区域

# matplotlib子图之subplots
# axes可以通过索引获取ax1=a[0][0]
# fig,axes=plt.subplots(nrows,ncols)
import math
fig,axes = plt.subplots(2, 2)
figure.suptitle(f'loss')
ax1=axes[0][0]
ax2=axes[0][1]
ax3=axes[1][0]
ax4=axes[1][1]
x=[i for i in range(1,10)]

# exp:在第一个区域绘制x的平方
ax1.plot(x,[math.pow(i,2) for i in x])
ax[0][0].set_title('avg loss')
#     在第二个区域绘制x的平方根
ax2.plot(x,[math.sqrt(i) for i in x])
#     在第二个区域绘制x的exp
ax3.plot(x,[math.exp(i) for i in x])
#     在第二个区域绘制x的log
ax4.plot(x, [math.log(i) for i in x])

注意:如果是一个一行多列或者多行一列的数据,则会返回一个一维数组而不是二维的,比较以下即可注意到以下和以上的ax索引下标差异。

figure,ax = plt.subplots(1, 2)
figure.suptitle(f'lr={lr}-epochs={epochs}')
ax[0].plot(range(len(avg_losses_list)),avg_losses_list)
ax[0].set_title('avg loss')

ax[1].plot(range(len(total_losses_list)),total_losses_list)
ax[1].set_title('total loss')

1.16 基本柱状图

# 基本柱状图
%matplotlib notebook
x=[i for i in range(-40,40)]
# x=['c','j','p']
y=[i+1 for i in x]
plt.bar(x,height=y,width=0.5)
# 距离为bottom的位置才开始画
# plt.bar(x,height=y,width=0.5,bottom=[i+20 for i in range(-40,40)])
# color可以指定每一个
plt.bar(x,height=y,width=0.5,bottom=[i+20 for i in range(-40,40)],
        color=('r','g','b'))
# color指定全部
plt.bar(x,height=y,width=0.5,bottom=[i+20 for i in range(-40,40)],
        facecolor='b')

1.17 同位置设置多个柱状图

# 同位置设置多个柱状图
countries=['挪威','德国','中国','美国','瑞典']
x=np.arange(len(countries))
gold_medal=[16,12,9,8,8]
silver_medal=[8,10,4,10,5]
bronze_medal=[13,5,2,7,5]
width=0.2

# 金牌的起始位置
gold_x=x
silver_x=x+width
bronze_x=x-width
plt.bar(x=gold_x,height=gold_medal,color='r',width=width)
plt.bar(x=silver_x,height=silver_medal,color='orange',width=width)
plt.bar(x=bronze_x,height=bronze_medal,color='silver',width=width)
plt.xticks(x,countries)

1.18 直方图

# 直方图
%matplotlib notebook
x=np.random.randint(100,150,200)
# num:直方图的值
# bins:返回各个bin的区间范围
# patches:返回每个bin里面包含的数据,是一个list
num,bins,patches=plt.hist(x=x,bins=5,color='orange',ec='white',width=5)
plt.show()

1.19 饼状图

# 饼状图
%matplotlib notebook
# autopct显示比率
explode=[0.03,0.05,0.06,0.04]
# explode设置饼图分裂开的位置
# labeldistance pctdistance 表示距离中心的距离
plt.pie(x=[200,100,300,400],labels=['a','b','c','d'],autopct='%.2f%%',explode=explode,labeldistance=1.3,pctdistance=0.2)

1.20 保存图片

# 保存图片
%matplotlib notebook
x=np.arange(1,10)
y=x*2
plt.plot(x, y)
plt.savefig('./name.png',dpi=100)
plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值