Нормализация данных и применение цветовой карты приводит к повороту изображения с помощью matplotlib?
Поэтому я хотел посмотреть, смогу ли я создать фрактальное пламя, используя matplotlib, и решил, что хорошим тестом будет треугольник Серпинского. Я изменил имеющуюся у меня рабочую версию, которая просто выполняла игру в хаос, нормализуя диапазон x от -2, 2 до 0, 400 и диапазон y от 0, 2 до 0, 200. Я также обрезал координаты x и y до 2 десятичные разряды и умноженные на 100, чтобы координаты можно было поместить в матрицу, к которой я мог бы применить цветовую карту. Вот код, над которым я сейчас работаю (пожалуйста, прости за беспорядок):
import numpy as np
import matplotlib.pyplot as plt
import math
import random
def f(x, y, n):
N = np.array([[x, y]])
M = np.array([[1/2.0, 0], [0, 1/2.0]])
b = np.array([[.5], [0]])
b2 = np.array([[0], [.5]])
if n == 0:
return np.dot(M, N.T)
elif n == 1:
return np.dot(M, N.T) + 2*b
elif n == 2:
return np.dot(M, N.T) + 2*b2
elif n == 3:
return np.dot(M, N.T) - 2*b
def norm_x(n, minX_1, maxX_1, minX_2, maxX_2):
rng = maxX_1 - minX_1
n = (n - minX_1) / rng
rng_2 = maxX_2 - minX_2
n = (n * rng_2) + minX_2
return n
def norm_y(n, minY_1, maxY_1, minY_2, maxY_2):
rng = maxY_1 - minY_1
n = (n - minY_1) / rng
rng_2 = maxY_2 - minY_2
n = (n * rng_2) + minY_2
return n
# Plot ranges
x_min, x_max = -2.0, 2.0
y_min, y_max = 0, 2.0
# Even intervals for points to compute orbits of
x_range = np.arange(x_min, x_max, (x_max - x_min) / 400.0)
y_range = np.arange(y_min, y_max, (y_max - y_min) / 200.0)
mat = np.zeros((len(x_range) + 1, len(y_range) + 1))
random.seed()
x = 1
y = 1
for i in range(0, 100000):
n = random.randint(0, 3)
V = f(x, y, n)
x = V.item(0)
y = V.item(1)
mat[norm_x(x, -2, 2, 0, 400), norm_y(y, 0, 2, 0, 200)] += 50
plt.xlabel('x0')
plt.ylabel('y')
fig = plt.figure(figsize=(10,10))
plt.imshow(mat, cmap="spectral", extent=[-2,2, 0, 2])
plt.show()
Математика здесь кажется прочной, поэтому я подозреваю, что происходит нечто странное с тем, как я обращаюсь, где все должно идти в матрицу 'mat' и как значения там соответствуют цветовой карте.
1 ответ
Если я правильно понял вашу проблему, вам нужно транспонировать матрицу, используя метод .T
, Так что просто замени
fig = plt.figure(figsize=(10,10))
plt.imshow(mat, cmap="spectral", extent=[-2,2, 0, 2])
plt.show()
от
fig = plt.figure(figsize=(10,10))
ax = gca()
ax.imshow(mat.T, cmap="spectral", extent=[-2,2, 0, 2], origin="bottom")
plt.show()
Аргумент origin=bottom
говорит imshow
чтобы источник вашей матрицы был внизу рисунка.
Надеюсь, поможет.