2017-02-16 3 views
0

512を生成し、私は簡単には、各セルが矩形で見ることができるようにMatplotlibを使って各セルの特定のピクセルサイズでヒートマップを作成する方法は?

data = np.random.rand(4,4) 
fig, ax = plt.subplots() 
heatmap = ax.pcolor(data, cmap=plt.cm.Blues) 
plt.show() 

enter image description here

が使用私のヒートマップを作ることができると私は、それぞれが正方形(32×32画素)になりたいですx 512ピクセルイメージ。

プロット(または個々のセル)を特定のピクセルサイズにする方法はありますか?

編集

  • 私の画面DPIは私がここで実際のヒートマップは512×512と ない全体図
+0

目盛りとラベルをその512x512スペースの外に保持しますか? – Aaron

+0

実際には、それらは不要です - OPにいくつかの詳細を追加 – pepe

答えて

0

になりたい100

  • です前の投稿から引用してください:

    Matplotlibはピクセルで直接動作するのではなく、物理的には サイズとDPIで動作します。特定のピクセルの数字を表示する場合は、モニターのDPIを知る必要があります。例えば、このリンク がそれを検出します。

    あなたは3841x7195ピクセルの画像を使用している場合、あなたが大規模なので、あなたは(matplotlibのは、画面に収まるように数字を必要とサイズ の数字を表示することができなくなること モニターになることはほとんどありません のサイズが大きすぎると要求すると、画面サイズに縮小されます)。 例のために800x800ピクセルのイメージがほしいと想像してみましょう。

    plt.figure(figsize =(800/my_dpi、800/my_dpi)、DPI = my_dpi)ですから、 基本的には寸法を分割:ここに は私のモニター(my_dpi = 96)で800×800ピクセルの画像を表示する方法を説明しますあなたのDPIによってインチ単位で。

    特定のサイズの図形を保存する場合は、別の問題 です。画面のDPIはもはや重要ではありません( に画面に収まらない図形を要求しない限り)。同じ例である800x800ピクセルの数字 を使用すると、異なる解像度で保存することができます savefigのdpiキーワードを使用します。

    plt.savefig(「my_fig.png」、DPI = my_dpi)DPI 10を使用して、8000x8000 画素画像として保存するには:画面 同じ解像度に保存することがちょうど同じDPIを使用します

    plt.savefig( 'my_fig.png'、dpi = my_dpi * 10)DPIの の設定は、すべてのバックエンドでサポートされているわけではありません。ここでは、PNGバックエンドは ですが、pdfとpsバックエンドはサイズを別々に実装します。 また、DPIとサイズを変更すると、 fontsizeのようなものにも影響します。 DPIを大きくするとフォントの相対サイズは同じになりますが、図形のフォントを小さくする場合は、 を使用してDPIではなく物理サイズを大きくする必要があります。

    あなたはX 7195 3841個のピクセルで画像を保存したい場合は、次の操作を行うことができ、バックあなたの例に行き方:

    plt.figure(figsize =(3.841、7.195)、DPI = 100) (あなたのコード...) plt.savefig( 'myfig.png'、dpi = 1000)大部分の画面に収まるようにfigureのdpiを としましたが、dpi = 1000で保存すると、解像度が になりました。私のシステムでは、これは3840x7190 ピクセルのpngを生成します。保存されたDPIは、常に0.02ピクセル/インチで、 は選択した値より小さく、 大きな画像サイズには(小さな)効果があります。これについてもう少し議論する。

    Specifying and saving a figure with exact size in pixels

    それが役に立てば幸い!

  • 1

    値に関連付けられた目盛りやラベルが含まれていない画像のみを表示する場合は、をから使用することをおすすめします。あなたは一つの画素で画像を作成することができるようにPILはまた、画像のサイズを変更することができます

    im = PIL.Image.fromarray(ndarray, mode='f')

    ...その後のfloat32 modeまたはint32のモードを使用して、おそらくあなたのイメージを作成し、あなたの配列ので、それぞれの値が繰り返され、32×32のタイルに必要になります1ビンあたり resizeピクセル単位のリサンプリングなし: im.resize((512,512),resample=0)

    関連する問題