我是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
先感谢您!