Широта-долгота данных в 2D матричной ошибке - PullRequest
0 голосов
/ 28 октября 2019

В настоящее время в моем наборе данных есть три столбца: x (долгота в градусах), y (широта в градусах) и z (выбросы загрязняющих веществ в г / с). Я хотел бы построить это как тепловую карту, где каждый квадрат на рисунке представляет расстояние 1 км х 1 км, которое также является масштабом моих данных (хотя это в градусах). Я бы хотел, чтобы мои значения долготы и широты стали независимыми от матрицы в направлении x и y соответственно, где z - это данные в матрице, а каждая точка соответствует эквивалентной координате. (т. е. если значения lon lat, например, (5.123, 50.123) и соответствующее значение эмиссии равно 20, я бы хотел, чтобы столбец «5.123» и строка «50.123» имели значение 20).

ОднакоЯ пытаюсь сделать это, так как мои значения не целые числа, а числа с плавающей точкой. Я нашел способ сделать это с двумя произвольными векторами x и y, где значения увеличиваются целыми шагами. Код показан ниже.

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib import cm
import pandas as pd

nrofrows = 10
vec1 = list(range(0,nrofrows))
vec2 = list(range(0,nrofrows))
numrowsx=len(vec1)
numrowsy=len(vec2)
##xless are the first 10 values of longitude
##yless are the first 10 values of latitude
##zless are the first 10 values of the emissions, all 3 from my data set

xless = [2.37328, 2.37353, 2.38661, 2.38686, 2.38711, 2.38736, 2.3876,  2.38785, 2.3881, 2.38835]
yless = [51.26981, 51.26082, 51.30591, 51.29693, 51.28794, 51.27895, 51.26997, 51.26098, 51.25199, 51.24301]
zless = [9.54e-05, 7.79e-06, 7.53e-06, 3.03e-04, 6.73e-04, 1.02e-03, 1.37e-03, 8.47e-04, 2.48e-04, 1.38e-05]

enter code here
##this works, but I would like to change vec1 and vec2 to xless and yless
z_array = np.nan * np.empty((numrowsx,numrowsy))
z_array[vec1, vec2] = zless
print(z_array)

plt.imshow(z_array, cmap='hot', interpolation='nearest')
plt.colorbar()
plt.show()

##This fills the matrix with randomly generated numbers
randnum = np.random.random((numrowsx, numrowsy))
#print(randnum)
plt.imshow(randnum, cmap='hot', interpolation='nearest')
plt.colorbar()
plt.show()

Ошибки, которые я получил:

IndexError: массивы, используемые в качестве индексов, должны иметь целочисленный (или логический) тип

ИЛИ

IndexError: допустимыми являются только целые числа, срезы (:), многоточие (...), numpy.newaxis (None) и целые или логические массивы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...