2013-05-31 4 views
7

내 시뮬레이션 결과와 함께 3D 히트 맵을 그리기 위해 matplotlib를 사용하려고합니다. 나는 this topic을 읽고 imshow를 사용하려고했습니다. 불행히도 SVG 또는 EPS 형식으로 그림을 저장하면 heatmat가 그림으로 변환됩니다 (이는 저널에는 적합하지 않습니다). 그래서, 나는 또한 hexbin을 시도했습니다 -하지만 이미지가 이상합니다. 나는 그것이 저널에 의해 받아 들여질 지 확신하지 못합니다. 우리는 다른 것을 가지고 있습니까, 아니면 직사각형으로 열 매트를 채워야합니까? 하나는이 코드를 실행하는 경우벡터 형식의 matplotlib 히트 맵

예를 들어, : 오픈 수세 우분투에 따라, 버전 1.1.1

<g clip-path="url(#p6def4f5150)"> 
    <image height="347" width="315" x="115.127800906" xlink:href="data:image/png;base64, 

내가 사용하기 matplotlib :

import numpy as np 
import numpy.random 
import matplotlib.pyplot as plt 

# Generate some test data 
x = np.random.randn(8873) 
y = np.random.randn(8873) 

heatmap, xedges, yedges = np.histogram2d(x, y, bins=50) 
extent = [xedges[0], xedges[-1], yedges[0], yedges[-1]] 

print extent 
print heatmap 
plt.clf() 
surf = plt.imshow(heatmap, extent=extent) 
plt.colorbar(surf, shrink=0.75, aspect=5) 
plt.show() 

및 SVG 파일을 저장을, 그것은 PNG 이미지를 컨테이너, 것입니다 OS.

+0

@tcaswell 주 주제 인 – rth

답변

9

pcolormesh 벡터 출력을 원하면 imshow을 사용하십시오.

pcolor 또는 pcolormesh을 사용할 경우 이미지를 보간 할 수 없습니다. 반면 벡터 출력을 원한다면 보간을 원하지 않을 수도 있습니다.

기본적으로 imshowpcolor/pcolormesh의 차이가있는 이유입니다. imshow은 래스터를 생성하고 pcolormeshpcolor은 직사각형 패치를 생성합니다.

또한 이미지 범위 내에서 전달 방법을 약간 변경해야합니다. 당신을 기반으로 예를 들어 : 당신은 SVG로 저장하면

import numpy as np 
import numpy.random 
import matplotlib.pyplot as plt 

# Generate some test data 
x = np.random.randn(8873) 
y = np.random.randn(8873) 

heatmap, xedges, yedges = np.histogram2d(x, y, bins=50) 

surf = plt.pcolormesh(xedges, yedges, heatmap) 
plt.axis('image') 
plt.colorbar(surf, shrink=0.75, aspect=5) 
plt.show() 

enter image description here

, 출력 벡터 패치 될 것입니다. 예 :

... 
    <g id="QuadMesh_1"> 
    <defs> 
    <path d=" 
M75.9063 -43.2 
L82.9705 -43.2 
L82.9705 -50.112 
L75.9063 -50.112 
L75.9063 -43.2" id="C0_0_9d1ab33858"/> 
    <path d=" 
M82.9705 -43.2 
L90.0348 -43.2 
L90.0348 -50.112 
L82.9705 -50.112 
L82.9705 -43.2" id="C0_1_d828245e6a"/> 
... 
+0

을 편집했습니다. 그것은 작동합니다! :) 당신은 이것을 설명 할 수 있습니까 : 'plt.axis ('image ')'? – rth

+0

플롯의 종횡비를 1로 설정합니다 (즉, 정사각형 픽셀은 정사각형입니다). 한계가 트림됩니다. 단지 출력이 'imshow'와 비슷하게 보입니다. –