2

私はmatplotlibが初めてで、非常に単純な (推測している) 質問があります。

50x70の「単位」の長方形で表す必要があるデータがいくつかあります(実際には足であり、実際には部屋を表しています)が、両方の軸で同じスケールの長方形を描画するmatplotlibを取得できないようです同時に50x70の「寸法」を維持します。

私は次のことを試しました:

import json
import matplotlib
import os
import sys
import traceback
import matplotlib.pyplot as plt

DATA_FILE = os.path.join(os.path.expanduser("~"), "results.json")
FLOOR_DIMENSIONS = (50, 70)

if __name__ == "__main__":
    if len(sys.argv) > 1:
        DATA_FILE = os.path.abspath(sys.argv[0])
    print "Gonna see what happens with file %s" % DATA_FILE
    try:
        with open(DATA_FILE, 'r') as f:
            result_dict = json.load(f)
    except (IOError, OSError, ValueError), e:
        print "Received %s %s when trying to parse json from %s\n"\
        "Showing traceback: %s" % (type(e), e, DATA_FILE, traceback.format_exc())
        result_dict = {}    
    for d_mac in result_dict:
        data = result_dict[d_mac]
        if len(data) < 3:
            continue
        x_s = list(d['x'] for d in data)
        y_s  = list(d['y'] for d in data)
        plt.scatter(x_s, y_s, marker='o', c=numpy.random.rand(5,1), s=15)
    plt.xlim([0, FLOOR_DIMENSIONS[0]])
    plt.ylim([0, FLOOR_DIMENSIONS[1]])
    #plt.axis('equal')
    plt.show()
    sys.exit(0)

それを行うと、次のようになります。

ここに画像の説明を入力

XYスケールを変更して、データを正方形内に描画します(Xは50ポイント、Yは70ポイントです。したがって、Yは「縮小」を示します)

私が試した別のオプションは、行のコメントを外すことでしたplt.axis('equal')が、それは Y 軸を「カット」します (0 で始まり 70 で終わるのではなく、15 で始まり 55 で終わります。おそらくy < 15と yのデータがないためです) > 55)

ここに画像の説明を入力

しかし、私はそれも望んでいません。Y=0 で始まり Y=70 で終わる「キャンバス」が必要です。データがない場合は、空のスペースを表示するだけです。

私が必要とするのは、次のようなものを描くことです:

ここに画像の説明を入力

プロットがレンダリングされたウィンドウのサイズを手動で変更することで取得しました:-D

前もって感謝します!

4

1 に答える 1