2013-02-23 2 views
1

matplotlib를 사용하여 일부 플롯 렌더링을 수행하는 PtQt를 사용하는 프로그램이 있습니다. 이미지를 저장하기 위해 범례를 사용하여 사용자 지정 이미지를 렌더링하고 싶습니다 (기본 제공되는 드래그 가능한 기능으로 인해 매우 매력적입니다). 나는 전설을 읽고 있지만 커스텀 이미지를 렌더링 할 수있는 Qt에 대한 내 자신의 paintEvent() 메소드를 호출하는 범례를 만드는 방법을 알아낼 수 없다.Matplotlib에서 사용자 지정 아티스트 범례

이 접근법이 끔찍한 경우, 내 목표는 다음과 같습니다. 플롯 창 내부에 이미지 (Qt로 프로그램 내부에서 렌더링 됨)를 배치하거나 내 보낸 그림 위에이 이미지를 추가하는 방법을 찾고 싶습니다.

다음은 출력이 지금의 모습의 스크린 샷입니다 :

내가 상단에있는 DAIP ... 순서를 취할 좋아하고 그림으로 수출하는 것이이 것입니다.

누군가가 전에 비슷한 문제를 해결했으면 좋겠다.

+0

스크린 샷. 네가 그림 속의 이미지를 원한다는 소리를 들었다. 그렇지? http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.figimage이 트릭을 수행하나요? – pelson

답변

1

이미지를 임시 png 파일에 저장 한 후 matplotlib의 OffsetImage 및 AnnotationBBox 기능을 사용하여 해결했습니다. 어떤 이유로 임시 파일로 유지하는 것이 제대로 작동하지 않았습니다.

간단히 : 실종

#draw stuff onto QPixmap named pix 
byteArray = QByteArray() 
buffer = QBuffer(byteArray) 
buffer.open(QIODevice.WriteOnly) 
pix.save(buffer, 'PNG') 
stringIO = StringIO(byteArray) 
stringIO.seek(0) 
tfile = tempfile.NamedTemporaryFile(suffix=".png", mode="wb", delete=False) 
tfile.write(stringIO.buf) 
tfile.close() 
imagebox = mpl.offsetbox.OffsetImage(mpl._png.read_png(tfile.name),zoom=zlvl) 
ab = mpl.offsetbox.AnnotationBbox(imagebox, [w/2,0],frameon=False) 
ab.set_figure(self.canvas.figure) 
ab.draggable() 
self.subplot.axes.add_artist(ab) 
os.remove(tfile.name) 
관련 문제