我已经尝试按照此处的最佳答案生成热图:Generate a heatmap in MatPlotLib using a scatter data set
在这里有一些善意的帮助,我已经塑造了我的数据,所以我可以相对轻松地挖掘(虽然不是很漂亮的代码)x和y坐标。
坐标很好地放入数组中,但当我将这些数组插入热图代码时,我得到以下输出:
我使用的代码如下:
import csv
import string, numpy as np
import numpy as np
import numpy.random
import matplotlib.pyplot as plt
import pickle
import operator as oper
import re
from math import sqrt
import re # used here to remove non-numeric values
file = open('P2E2D_Long_Format.csv', 'rb')
reader1 = csv.reader(file, delimiter = '\t')
non_decimal = re.compile(r'[^\d.]+')
x = []
y = []
count = 0
for row in reader1:
#print row
if 'SCL' in row[0] and count <= 5000:
#print row[0]
if len(row[2]) and len(row[3]) > 0: #ensures that x and y CoOr are not empty.
if ' .' not in row[2] and 'SAMPLES' not in row[3]:
#populates list with values in row 2 & 3
xCoOr = row[2]
yCoOr = row[3]
#this code removes the blank spaces before numbers
x1 = non_decimal.sub('', xCoOr)
y1 = non_decimal.sub('', yCoOr)
print x1, 'XCoOr'
print y1, 'YCoOr'
#changes values from file, that are seen as string, to a float
x1 = float(x1)
y1 = float(y1)
#print x1
x = x + [x1]
y = y + [y1]
count = count + 1
print count
myarrayx = np.asarray(x)
myarrayy = np.asarray(y)
myarrayx = myarrayx - 508
myarrayy = myarrayy - 384
myarrayx = myarrayx / 100
myarrayy = myarrayy / 100
heatmap, xedges, yedges = np.histogram2d(myarrayx, myarrayy, bins=50)
extent = [xedges[0], xedges[-1], yedges[0], yedges[-1]]
plt.clf()
plt.imshow(heatmap, extent=extent)
plt.show()
file.close() # <---IMPORTANT
#Long_Format.close()
#textFile.close()
row [0]是试用ID,行2是x CoOr,行[3]是y CoOr。
当观察上面的输出图时,看起来好像完全没有y轴。
有没有人有任何想法?
以下是我正在使用的一些数据:
"Trial ID Frame ID X-CoOr Y-CoOr Time"
"SCL 5413917 PreBeep1_1st_Sketchpad 653.8 542.1 4844"
"SCL 5413917 PreBeep1_1st_Sketchpad 654.7 542.2 4847"
"SCL 5413919 order of frames: 655.5 541.9 4849"
"SCL 5413919 order of frames: 656.1 541.2 4851"
"SCL 5413921 crosshair 655.8 540.8 4851"
"SCL 5413921 crosshair 655.7 540.6 4847"
"SCL 5413923 sketchpad 655.7 540.6 4843"
"SCL 5413923 sketchpad 655.5 540.6 4838"
"SCL 5413925 sketchpad 655.3 540.7 4838"
"SCL 5413925 sketchpad 655.1 540 4833"
"SCL 5413927 sketchpad 655.3 538.9 4829"
"SCL 5413927 sketchpad 655.4 538.1 4825"
"SCL 5413929 buffer1 655.6 537.8 4824"
"SCL 5413929 buffer1 655.5 537.5 4824"
"SCL 5413931 Diode1 655.2 537.3 4824"
"SCL 5413931 Diode1 654.9 537.6 4831"
"SCL 5413931 Diode1 654.9 538.1 4836"
"SCL 5413931 Diode1 654.8 538.6 4841"
"SCL 5413931 Diode1 654.8 539 4841"
"SCL 5413931 Diode1 655.6 539.1 4841"
编辑:我手动操作图窗口中x和y轴上的最小值和最大值,如下所示:
可以看出,x轴最大值很大。我不确定为什么会这样。我怀疑这个值必须出现在我的数据中的xCoOr列中。
但是,即使我调整最大值和最小值,热图也是空白的。
感谢您抽出宝贵时间。
答案 0 :(得分:2)
我的同事解决了这个问题。
问题在于宽高比。
我首先滤除了2000以上的任何x或y值(因为数据中存在一些巨大的假象)。
我的同事然后写了以下代码:
plt.imshow(heatmap, extent=extent, aspect='auto')
他补充的关键是
方面= '自动'
这使x轴伸展以匹配y轴,从而使一切更加明显。
更正输出:
感谢所有考虑过问题的人。