随手记点东西,想到什么补充什么。
子图
t1 = np.arange(0, 5, 0.1)
t2 = np.arange(0, 5, 0.02)
plt.figure(1) # 创建一个图,名为1
plt.subplot(2,2,1) # 在图1里面定义2行2列,一共4个子图位置,取第1个位置
plt.plot(t2, np.cos(2 * np.pi * t2), 'r--') # 画图
plt.subplot(2,2,2) # 在图1里面定义2行2列,一共4个子图位置,取第2个位置
plt.plot(t2, np.cos(2 * np.pi * t2), 'r--') # 画图
plt.subplot(2,1,2) # 在图1里面定义2行1列,一共2个子图位置,取第2个位置
plt.plot([1, 2, 3, 4], [1, 4, 9, 16]) # 画图
plt.show()
因为一些原因,需要实时在图片旁边显示数据的变化。但是我原来的程序是用opencv画的,又不会用opencv画好看的坐标,所以就想到用matplotlib来画的坐标转为图片,直接上代码。代码参考:原大佬博客:https://blog.csdn.net/C_chuxin/article/details/84000438
import matplotlib.pyplot as plt
import numpy as np
import io
from PIL import Image
import cv2
t2 = np.arange(0, 5, 0.02)
fig = plt.figure(1) # 创建一个图,名为1
plt.plot(t2, np.cos(2 * np.pi * t2), 'r--') # 画图
canvas = fig.canvas # 获取画布
buffer = io.BytesIO() # 获取输入输出流对象
canvas.print_png(buffer) # 将画布上的内容打印到输入输出流对象
data = buffer.getvalue() # 获取流的值
buffer.write(data) # 将数据写入buffer
img = Image.open(buffer) # 从buffer中读取图片
img = np.asarray(img)[:, :, :3] # 转化成cv2能显示的格式->取3通道(原来是4个颜色通道,不知道为什么)
buffer.close() # 释放buffer
img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR) # 调整颜色通道:RGB->BGR
cv2.imshow(" ", img)