在Matplotlib/Python中向大图添加小照片/图像
我正在用matplotlib生成一个很大的图表。我想在这个图表的某些(x,y)坐标上添加一些图标。我想知道在matplotlib中有没有办法做到这一点。
谢谢
3 个回答
1
虽然我来得有点晚,但希望对未来的人有帮助。
我发现添加一个 AnnotationBbox
,里面放一个 OffsetImage
,就能解决我的问题。例如:
#!/usr/bin/env python
import matplotlib
matplotlib.use('WXAgg')
import matplotlib.pyplot as plt
from matplotlib.offsetbox import (OffsetImage,AnnotationBbox)
from matplotlib.cbook import get_sample_data
# The slices will be ordered and plotted counter-clockwise.
labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
sizes = [15, 30, 45, 10]
colors = ['yellowgreen', 'gold', 'lightskyblue', 'lightcoral']
explode = (0.1, 0, 0, 0) # explode a slice if required
fig, ax = plt.subplots()
ax.pie(sizes, explode=explode, labels=labels, colors=colors,
autopct='%1.1f%%', shadow=True)
#Full path name to your image
fn = get_sample_data("/home/rolf/bandwidth/bandwidth.png", asfileobj=False)
arr_img = plt.imread(fn, format='png')
imagebox = OffsetImage(arr_img, zoom=1.2)
imagebox.image.axes = ax
xy = [0.75, 0.95]
ab = AnnotationBbox(imagebox, xy,
xybox=(120., -10.),
xycoords='data',
boxcoords="offset points",
pad=0.5,
)
ax.add_artist(ab)
# Set aspect ratio to be equal so that pie is drawn as a circle.
plt.axis('equal')
plt.show()
你可以通过调整 xy
和 xybox
的值,来在图表中移动图片。
如果你想进一步了解,可以看看这些链接:
http://matplotlib.org/examples/pylab_examples/demo_annotation_box.html
https://developer.ibm.com/clouddataservices/2016/10/06/your-own-weather-forecast-in-a-python-notebook/
6
这绝对是可能的。下面是一个开始的例子:
import matplotlib, scipy
fig = matplotlib.figure()
ax = fig.add_axes([0.1,0.1,0.8,0.8])
axicon = fig.add_axes([0.4,0.4,0.1,0.1])
ax.plot(range(5), [4,2,3,5,1])
axicon.imshow(scipy.randn(100,100))
axicon.set_xticks([])
axicon.set_yticks([])
fig.show()
图标重叠 http://up.stevetjoa.com/iconoverlap.png
在这个例子中,图标的位置并没有用图表的(x,y)坐标来定义;也许其他人可以帮忙解决这个问题。不过,我希望这个例子对你有帮助。