[PYTHON] matplotlib 범례에 이미지 삽입
PYTHONmatplotlib 범례에 이미지 삽입
maplotlib 플롯의 전설에 몇 개의 작은 그래픽 (벡터 그래픽은 필요하면 래스터 화 가능)을 삽입하고 싶습니다. 범례에는 항목 당 하나의 그래픽이 있습니다.
주석 상자와 같은 것을 사용하여 수동으로 전체 범례를 그릴 수는 있지만 지루한 것처럼 보입니다. 그림의 작은 변화는 손으로 고정해야합니다.
pyplot.legend 호출에서 pyplot.plot 또는 나중에 호출 할 때 라벨에 그래픽을 포함 할 수있는 방법이 있습니까?
해결법
-
==============================
1.그래서, 아래는 조금 해키지만, 거기에 당신을 얻을 수있는 방법. 참고 : [PATH TO IMAGE]를 원하는 이미지로 바꿔야합니다 (그렇지 않으면 Grace 호퍼가 무료로 제공됩니다). image_stretch 매개 변수를 전달하여 이미지를 기본값보다 크게 만들 수도 있습니다. 이것은 이미지의 가로 세로 비율을 수정하는 해킹 방법입니다. 이미지가 한 시리즈에서 다음 시리즈로 겹치면 labelspacing 매개 변수를 사용하십시오.
그래서, 아래는 조금 해키지만, 거기에 당신을 얻을 수있는 방법. 참고 : [PATH TO IMAGE]를 원하는 이미지로 바꿔야합니다 (그렇지 않으면 Grace 호퍼가 무료로 제공됩니다). image_stretch 매개 변수를 전달하여 이미지를 기본값보다 크게 만들 수도 있습니다. 이것은 이미지의 가로 세로 비율을 수정하는 해킹 방법입니다. 이미지가 한 시리즈에서 다음 시리즈로 겹치면 labelspacing 매개 변수를 사용하십시오.
import os from matplotlib.transforms import TransformedBbox from matplotlib.image import BboxImage from matplotlib.legend_handler import HandlerBase from matplotlib._png import read_png class ImageHandler(HandlerBase): def create_artists(self, legend, orig_handle, xdescent, ydescent, width, height, fontsize, trans): # enlarge the image by these margins sx, sy = self.image_stretch # create a bounding box to house the image bb = Bbox.from_bounds(xdescent - sx, ydescent - sy, width + sx, height + sy) tbb = TransformedBbox(bb, trans) image = BboxImage(tbb) image.set_data(self.image_data) self.update_prop(image, orig_handle, legend) return [image] def set_image(self, image_path, image_stretch=(0, 0)): if not os.path.exists(image_path): sample = get_sample_data("grace_hopper.png", asfileobj=False) self.image_data = read_png(sample) else: self.image_data = read_png(image_path) self.image_stretch = image_stretch # random data x = np.random.randn(100) y = np.random.randn(100) y2 = np.random.randn(100) # plot two series of scatter data s = plt.scatter(x, y, c='b') s2 = plt.scatter(x, y2, c='r') # setup the handler instance for the scattered data custom_handler = ImageHandler() custom_handler.set_image("[PATH TO IMAGE]", image_stretch=(0, 20)) # this is for grace hopper # add the legend for the scattered data, mapping the # scattered points to the custom handler plt.legend([s, s2], ['Scatters 1', 'Scatters 2'], handler_map={s: custom_handler, s2: custom_handler}, labelspacing=2, frameon=False)
여기에 그것이 무엇을 생산하고 있습니다 :
from https://stackoverflow.com/questions/26029592/insert-image-in-matplotlib-legend by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 이 코드에서 'wb'는 파이썬을 사용하여 무엇을 의미합니까? (0) | 2018.11.19 |
---|---|
[PYTHON] 파이썬 :`datetime.datetime`에서`time.time`으로 변환하기 (0) | 2018.11.19 |
[PYTHON] import httplib ImportError : httplib이라는 모듈이 없습니다. (0) | 2018.11.19 |
[PYTHON] Python ftplib로 FTP를 통해 파일을 다운로드하는 방법 (0) | 2018.11.19 |
[PYTHON] 파이썬 setup.py가 트래비스 CI에서 잘못된 명령 'bdist_wheel'을 말하는 이유는 무엇입니까? (0) | 2018.11.19 |