Я не могу заставить свои стрелки на квиверплоте показать что-то значимое на моей тепловой карте - PullRequest
0 голосов
/ 03 октября 2019

Я пытаюсь, чтобы стрелки моего квиверплота показывали мне направление теплового потока с помощью np.gradient, но на самом деле он выглядит не очень хорошо. Это просто похоже на огромную черную массу! Многие подобные решения берут уравнения и строят их, но мне нужно взять данные из .csv, а затем использовать их для построения графика.

Эта ссылка показывает исходный код, который я адаптировал для своих целей: Нанесите стрелки градиента на карту тепла с помощью plt

Вот еще несколько ссылок, на которые я ссылался, чтобы попробовать ипомогите мне добраться до этой точки: Поле вектора градиента изображения в Python

Как построить град (f (x, y))?

Вот мой код в настоящее время:

import matplotlib.pyplot as plt
import numpy as np
import math

directory = os.chdir(r'directory') #Set folder to look in
file = 'data.csv'
data = np.genfromtxt(file, delimiter = ',')

horizontal_min, horizontal_max, horizontal_stepsize = 0, 100, 1
vertical_min, vertical_max, vertical_stepsize = 0, 100, 1

horizontal_dist = horizontal_max-horizontal_min
vertical_dist = vertical_max-vertical_min

horizontal_stepsize = horizontal_dist / 
float(math.ceil(horizontal_dist/float(horizontal_stepsize)))
vertical_stepsize = vertical_dist / 
float(math.ceil(vertical_dist/float(vertical_stepsize)))

xv, yv =np.meshgrid(np.arange(horizontal_min, horizontal_max, 
horizontal_stepsize),
                np.arange(vertical_min, vertical_max, vertical_stepsize))
xv+=horizontal_stepsize/2.0
yv+=vertical_stepsize/2.0
result_matrix = np.asmatrix(data)
yd, xd = np.gradient(result_matrix)

def func_to_vectorize(x, y, dx, dy, scaling=0.01):
    plt.arrow(x, y, np.dot(dx,scaling), np.dot(dy,scaling), fc="k", ec="k", head_width=0.06, head_length=0.1)

vectorized_arrow_drawing = np.vectorize(func_to_vectorize)

plt.imshow(np.flip(result_matrix,0), extent=[horizontal_min, 
horizontal_max, vertical_min, vertical_max])
vectorized_arrow_drawing(xv, yv, xd, yd, 0.1)
plt.colorbar()
plt.show()

Результат

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