Plot中的Matplotlib Pyplot徽标/图像

Jar*_*red 4 python matplotlib

我正在努力在matplotlib中实现一个简单的目标...我想在我的图表的右下角放置一个小徽标或指示器,而不改变轴或正在显示的实际数据.这是我现在的代码:

fig = plt.figure()
plt.rcParams.update({'font.size': 15})

img = plt.imread('./path/to/image.png')
ax1 = fig.add_subplot(111)
ax1.yaxis.tick_left()
ax1.tick_params(axis='y', colors='black', labelsize=15)
ax1.tick_params(axis='x', colors='black', labelsize=15)

plt.grid(b=True, which='major', color='#D3D3D3', linestyle='-')

plt.scatter([1,2,3,4,5],[5,4,3,2,1], alpha=1.0)

plt.autoscale(enable=True, axis=u'both')

fig.savefig('figure.png')
Run Code Online (Sandbox Code Playgroud)

我的输出如下.

现在将照片放在整个图表上 - 我希望它可以缩放到宽度和高度的20%(如果可能的话)并固定在右下角.这也破坏了我的轴,因为在这个输出中我应该在x和y的0-100范围内.任何解决这个问题的想法,缩放都是一个大问题.

编辑1:我已经尝试了下面的解决方案,并在此处链接了问题.问题是依赖于extent传递的变量imshow()然后在引入新数据时不能很好地工作.例如,绘制来自数据框的散点图可能是0..1000和50..100,但使用范围不会显示标签或位置将关闭.

Edit2:获取数字长度fig.get_size_inches()并将变量传递给似乎有一些进展extent.显然所有的matplotlib图形计算都是通过英寸来完成的,所以这可能是一个很有希望的领先优势.

在此输入图像描述

Fré*_*ans 6

以下是对 Kirubaharan J 答案的改编,但根据图形的范围调整徽标的位置(但不保留徽标本身的长宽比)

import matplotlib.image as image
import matplotlib.pyplot as plt

im =image.imread('debian-swirl.png')
fig, ax = plt.subplots()
ax.yaxis.tick_left()
ax.tick_params(axis='y', colors='black', labelsize=15)
ax.tick_params(axis='x', colors='black', labelsize=15)
ax.grid(b=True, which='major', color='#D3D3D3', linestyle='-')
ax.scatter( [100,90,89,70], [55, 23,76,29], alpha=1.0)

plt.autoscale(enable=True, axis=u'both')

xrng=plt.xlim()
yrng=plt.ylim()
scale=.2 #the image takes this fraction of the graph
ax.imshow(im,aspect='auto',extent=(xrng[0],xrng[0] + scale*(xrng[1]-xrng[0]), yrng[0], yrng[0] + scale*(yrng[1]-yrng[0]) ), zorder=-1)
plt.xlim(xrng)
plt.ylim(yrng)

plt.show()
Run Code Online (Sandbox Code Playgroud)


Kir*_*n J 5

import matplotlib.image as image
import matplotlib.pyplot as plt

im = image.imread('debian-swirl.png')
fig, ax = plt.subplots()
ax.imshow(im, aspect='auto', extent=(0.4, 0.6, .5, .7), zorder=-1)
ax.yaxis.tick_left()
ax.tick_params(axis='y', colors='black', labelsize=15)
ax.tick_params(axis='x', colors='black', labelsize=15)
ax.grid(b=True, which='major', color='#D3D3D3', linestyle='-')
ax.scatter([1,2,3,4,5],[5,4,3,2,1], alpha=1.0)
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我在左下角添加了一个png文件.调整范围参数以设置徽标位置.

类似于:在matplotlib中缩放图像而不更改轴

  • 是否无法将图像包含在绘图的 20% 宽度和高度中,而不取决于数据?我希望能够不断地将此图像放在我创建的任何绘图上,并且使用此代码,我必须根据我的轴如何随新数据缩放来调整“范围”因子 (2认同)