matplotlib绘图中插入图片

在使用matplotlib下的pyplot绘图时,有时处于各种原因,需要采用类似贴图的方式,插入外部的图片,例如添加自己的logo,或者其他的图形水印等。

一开始,查找到的资料都是使用imshow,但是这会有带来几个问题,一个是图形的原点发生了变化,另外一个问题就是图形比例也产生了变化,当然最大的问题是图形占据了整个绘图区域,完全喧宾夺主了,与我们设想的只在绘图区域中占据很小的一块不相符。

经过测试,提出了一种“画中画”方式,即在绘图区域中嵌套子绘图区域的方式,实现贴图文件的显示。废话少说,直接丢代码:

import matplotlib.pyplot as plt
import numpy as np

def stdNorm(x):
    return np.exp(-x**2/2)/np.sqrt(2*np.pi)

N=500000
x=np.random.randn(N)
barCnt=500
fig,ax = plt.subplots()
ax.hist(x,bins=barCnt,color='g',density=True)

t=np.linspace(-5,5,1000)
f=np.vectorize(stdNorm)
ax.plot(t,f(t),'r',lw=2)
ax.set_xticks(np.linspace(-5,5,11))

#贴logo
plt.axes([0.8,0,0.2,0.2]) # 右下方
bgimg=plt.imread("logo1.jpg")
plt.imshow(bgimg,alpha=0.5)
plt.axis("off")
plt.show()

效果如下:

贴图位置取决于 语句:

plt.axes([0.8,0,0.2,0.2]) # 右下方

如果修改为:

plt.axes([0.0,0.8,0.2,0.2]) # 左上方

就是左上方了,其中的四个元素分别表示的是归一化之后,子绘图区域占据父绘图区域的x、y,以及width和height。

演示效果如下:

Qt Designer是一个可视化工具,用于创建用户界面(UI)而无需编写大量的QSS样式表和Qt C++代码。它主要用于构建基于Qt库的应用程序。如果你想在PyQt应用中集成matplotlib生成的图像,虽然Qt Designer本身并不能直接处理matplotlib图形,但你可以按照以下步骤操作: 1. **使用matplotlib绘制图像**:首先,在Python脚本中使用matplotlib创建图形并保存为图像文件,如PNG或PDF。 ```python import matplotlib.pyplot as plt fig, ax = plt.subplots() # 创建和绘图... plt.savefig('image.png') ``` 2. **将图像作为资源导入项目**:将上述保存的图像文件添加到你的PyQt项目的resources目录中,并确保设置正确的编码(`.qrc`资源文件)。 3. **在Qt Designer中显示图像**:在设计模式下,你需要通过代码动态地加载这个资源。创建一个槽函数(slot),在运行时读取图像数据并将其显示在一个`QLabel`, `QPixmap`, 或者使用`QGraphicsView`结合`QImageReader`。 ```python from PyQt5.QtGui import QPixmap, QImageReader from PyQt5.QtWidgets import QLabel def load_image(): image_path = 'image.png' reader = QImageReader(image_path) if reader.error() == QImageReader.NoError: pixmap = QPixmap.fromImage(reader.read()) label.setPixmap(pixmap) label = QLabel() load_image_button.clicked.connect(load_image) ``` 4. **连接信号和槽**:确保你在Qt Designer中有一个按钮或其他UI元素,为其关联上`load_image`函数,以便点击时触发图像加载。 记住,这种方式适用于小型静态图像,对于大型动态图表,你可能需要考虑使用QML(Qt Quick Language)或者其他更合适的方式来展示matplotlib生成的内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值