8

matplotlib を使用して、シミュレーションの結果で 3D ヒートマップをプロットしようとしています。このトピックを読み、 imshow を使用しようとしました。残念ながら、図を SVG または EPS 形式で保存すると、ヒートマットが画像に変換されます (これはジャーナルには受け入れられません)。だから、私も hexbin を試しましたが、画像はとても奇妙です。ジャーナルに受理されるかどうかはわかりません。他に何かありますか、それともヒートマットを長方形で埋める必要がありますか?

たとえば、次のコードを実行すると:

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画像が含まれます:

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

私は OpenSUSE と Ubuntu OS で matplotlib バージョン 1.1.1 を使用しています。

4

1 に答える 1

11

ベクトル出力が必要な場合 は、使用pcolormeshしている場所を使用してください。imshow

pcolorただし、またはを使用する場合pcolormesh、画像を補間することはできません。一方、ベクトル出力が必要な場合は、おそらく補間は必要ありません。

imshowそれが基本的にとpcolor/の違いの理由ですpcolormeshimshowはラスターを生成し、pcolormeshpcolorは長方形のパッチを生成します。

また、画像の範囲を渡す方法を少し変更する必要があります。あなたに基づく例として:

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()

ここに画像の説明を入力

svg として保存すると、出力はベクトル パッチになります。例えば

...
   <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"/>
...
于 2013-05-31T21:15:23.413 に答える