在pyplot

时间:2018-02-05 15:49:13

标签: python image matplotlib plot label

我想将图像设置为我制作的情节的ylabel。

以下代码

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.cbook import get_sample_data

from matplotlib.offsetbox import (TextArea, DrawingArea, OffsetImage,
                                  AnnotationBbox)

fig = plt.figure()
ax = fig.add_subplot(111)

ax.plot([1,2,3,4,5,6,7],[1,4,2,8,5,7,1])

arr = np.arange(100).reshape((10, 10))
im = OffsetImage(arr, zoom=2)
im.image.axes = ax
xy = (1, 5)

ab = AnnotationBbox(im, xy)

ax.add_artist(ab)

plt.show()

生成以下图:

enter image description here

我希望那张照片位于yaxis刻度的左边,而不是在情节上。

我尝试更改了行xy = (1, 5),但这只会让图片消失。

我也尝试过编写ax.set_ylabel(ab)ax.set_ylabel(im),但是(可预见)这些只是将对象的名称作为y轴标签。

1 个答案:

答案 0 :(得分:1)

您可能不希望根据数据坐标来定位ylabel,因为一旦绘制不同的数据或缩放到绘图中,这将改变ylabel。

而是将其定位在轴坐标中。两个轴方向的范围从0到1,这样y标签可能最好位于某个略微负的x位置(轴外),并且在y位置的中间位置。

AnnotationBbox(im, (-0.1, 0.5) , xycoords='axes fraction')

完整示例

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.offsetbox import OffsetImage, AnnotationBbox

fig = plt.figure()
ax = fig.add_subplot(111)

ax.plot([1,2,3,4,5,6,7],[1,4,2,8,5,7,1])

arr = np.arange(100).reshape((10, 10))
im = OffsetImage(arr, zoom=2)
im.image.axes = ax
xy = (-0.1,0.5 )

ab = AnnotationBbox(im, (-0.1, 0.5), xycoords='axes fraction')

ax.add_artist(ab)

plt.show()

enter image description here