深度学习笔记----matplotlib绘制多个子图(汉字标题,XY轴标签,加x,y刻度,给图上每个点加上数值)& PIL.Image 11行读取文件夹中照片

转自:matplotlib绘制多个子图(汉字标题,XY轴标签,加x,y刻度,给图上每个点加上数值)& PIL.Image 11行读取文件夹中照片_Mr_DaYang的博客-CSDN博客_matplotlib多个子图设置标题

以下代码解决:

  1. matplotlib如何显示汉字
  2. 如何在一张图上创建多个子图
  3. 加图例,标题,x,y坐标范围,加x,y刻度
  4. 控制线型,控制标记风格
  5. 给图上每个点加上数值
  6. 利用PIL.Image.read(path)读文件夹中照片
  7. 图片保存

 

1. 基本操作,效果如下

import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif']=['STSong']     # 中文宋体
x=np.linspace(1,20,100)
y=np.sin(x)
y1=np.cos(x)
------------------------**主要内容学会以下框里**----------------------------------
plt.figure('林', figsize=(8, 6))#建画布1:画布的名字 figsize:画布大小
#用subplot()创建第一个子图
plt.subplot(221)#221:将整个figure分成2行2列,共2个子图,这里子图是第一个位置
plt.plot(x, y, c='red', label='relu',linewidth = 1,linestyle=':', marker='|')#c:颜色 label:图例
#x,y范围
plt.ylim((-2, 3))
plt.xlim(2,20)
#x,y刻度
plt.xticks(np.arange(-2,3,0.5))
plt.xticks(np.arange(2,20,1))
#x轴的标签
plt.xlabel("啦啦啦",size=22)
plt.ylabel("啦啦啦",size=22)
#图例
plt.legend(loc='best')
plt.title("点个赞",size=22)
plt.savefig('./lin.jpg')#保存图片
------------------------------------------------------------------------------
#画第二个子图,跟上面一样
plt.subplot(224)
plt.plot(x,y1,c='green',label='喜喜',linewidth=1)
plt.ylim((-2, 3))
plt.xlim(0,12)
plt.legend(loc='best')
plt.xlabel("哦哦哦",size=20)
plt.ylabel("哦哦哦",size=20)
plt.title("点个赞",size=20)
-----------------------------------------------------------------------------
##法二,上面的方法是直接plt.操作
##现在返回一个对象的方式来生成图,为混乱只记一种方法
f, fig = plt.subplots(3,2)
fig[0][0].plot(x,y1,c='green',label='喜喜',linewidth=1)
fig[0][0].set_title('Dataset Images')
fig[0][0].legend(loc='best')
plt.show()

 

2. 更好看点,如下

注意:
plt.plot(x, y1, ‘r^-.’,label = “短点相间线”)
这里x=[1,2,3,4,5]是从1开始的,plot时可以只给y值,但是画图的时候起点从0开始

 ,1。1,控制线型,控制标记风格
plt.plot(x, y1, 'r^-.',label = "短点相间线")
r^-. 解释
r:表示红色
^:表示控制标记风格,其他标记风格如下图对应符号及形状
-. 表示控制线型,其他线性有(- 实线)(-- 短线)(-.短点相间线)(:虚点线)


2,给每个点加上数值
plt.text(x, y, s, fontsize, verticalalignment,horizontalalignment,rotation , **kwargs)
x, y:表示标签添加的位置,也就是说,你指定一个(x,y)的坐标位置,然后在这个地方加数字标签
s:表示所加标签的值,可以是数字,可以是汉字
fontsize:加标签字体大小了,取整数。
verticalalignment:表示垂直对齐方式 ,可选 ‘center’ ,‘top’ , ‘bottom’,‘baseline’
horizontalalignment:表示水平对齐方式 ,可选 ‘center’ , ‘right’ ,‘left’
rotation:表示标签的旋转角度,以逆时针计算,取整

 

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['STSong']     # 中文宋体
import numpy as np
x=[1,2,3,4,5,]
y1=[1,4,6,8,2,]
y2=[2,5,7,9,3,]
y3=[3,6,8,10,4,]

plt.plot(x, y1, 'r^-.',label = "短点相间线")
plt.plot(x, y2, 'g^--',label = "短线")
plt.plot(x, y3, 'b^:',label = "虚线")
plt.legend(loc='best')
for i in range(5):
    plt.text(x[i],y1[i]+0.2,s=y1[i],fontsize=10, color = "r", style = "italic", weight = "light", verticalalignment='center', horizontalalignment='right',rotation=0)#这里y1[i]+0.2加上0.2的目的是防止标记风格掩盖数字,所以将显示数字的位置上调
plt.show()

3. 11行读取文件夹中所有照片

#读文件夹中的照片
import os
import glob
import matplotlib.pyplot as plt
from PIL import Image#读图片用

#Image.open(path)中的path只能读一个具体的文件不能读文件夹
path0='luohao_person_reid\dataset\Market-1501-v15.09.15\\bounding_box_test\\0000_c1s1_000151_01.jpg'#YES
path1='luohao_person_reid\dataset\Market-1501-v15.09.15\\bounding_box_test'#NO
path2 = glob.glob(os.path.join('luohao_person_reid\dataset\Market-1501-v15.09.15\\bounding_box_test', '*.jpg'))#拿出path3下所有后缀带.jpg的文件,并给出绝对路径

for i in range(5):
    img = Image.open(path2[i]).convert('RGB')#type(path2)是list
    plt.figure(i)#每次创建一个画图(不放这句的话图形显示连贯),可以在最后加一个plt.close()关闭每个figure
    plt.imshow(img)
    plt.pause(0.2)
plt.show()#这是最终的一个显示,加上这句,图片就不连着放,需要鼠标点

#生成两幅图片,同时显示两个画布
# img = Image.open(path2[0]).convert('RGB')
# img1 = Image.open(path2[1]).convert('RGB')
# plt.figure(1)
# plt.imshow(img)
# plt.figure(2)
# plt.imshow(img1)
# plt.show()

图片保存

使用os.path.join('数据/图片',image_name)生成目录,括号中前一半是文件夹名,后一半是图片的名字
注意:要实现建好文件夹,否则报错

import os
img = Image.open(path1)
#法一
img.save(os.path.join('数据/图片',image_name))
#法二
plt.savefig()
#法三
scipy.misc.imsave( 'feature_map_save//'+str(index) + ".png", feature_map[index - 1])

#在REID代码里,有cv2.imwrite()的方法

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值