З plt.imshow()
офіційного довідника ми знаємо, що аспект керує співвідношенням сторін осей. Ну, моїми словами, аспект - це точно співвідношення x одиниці та одиниці y . Більшу частину часу ми хочемо зберегти його як 1, оскільки ми не хочемо ненавмисно спотворювати цифри. Однак справді бувають випадки, коли нам потрібно вказати аспект значення, відмінне від 1. Допитуючий навів хороший приклад того, що вісь x та y можуть мати різні фізичні одиниці. Припустимо, що х - у км, а у - у м. Отже, для даних 10x10 масштаб повинен бути [0,10km, 0,10m] = [0, 10000m, 0, 10m]. У такому випадку, якщо ми продовжуємо використовувати за замовчуванням аспект = 1, якість фігури справді погана. Отже, ми можемо вказати аспект = 1000 для оптимізації нашої цифри. Наступні коди ілюструють цей метод.
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
rng=np.random.RandomState(0)
data=rng.randn(10,10)
plt.imshow(data, origin = 'lower', extent = [0, 10000, 0, 10], aspect = 1000)
Тим не менше, я думаю, що є альтернатива, яка може задовольнити запит допитувача. Ми можемо просто встановити екстент як [0,10,0,10] і додати додаткові мітки осей xy для позначення одиниць. Коди наступні.
plt.imshow(data, origin = 'lower', extent = [0, 10, 0, 10])
plt.xlabel('km')
plt.ylabel('m')
Щоб скласти правильну фігуру, ми завжди повинні пам’ятати, що x_max-x_min = x_res * data.shape[1]
і y_max - y_min = y_res * data.shape[0]
де extent = [x_min, x_max, y_min, y_max]
. За замовчуванням, що aspect = 1
означає, що піксель одиниці має квадрат. Ця поведінка за замовчуванням також чудово працює для x_res та y_res, які мають різні значення. Розширюючи попередній приклад, припустимо, що x_res дорівнює 1,5, тоді як y_res дорівнює 1. Отже, ступінь повинна дорівнювати [0,15,0,10]. Використовуючи аспект за замовчуванням, ми можемо мати прямокутні кольорові пікселі, тоді як одиничний піксель все одно квадратний!
plt.imshow(data, origin = 'lower', extent = [0, 15, 0, 10])
data=rng.randn(10,5)
plt.imshow(data, origin = 'lower', extent = [0, 5, 0, 5])
Аспект кольорового пікселя становить x_res / y_res
. встановлення його аспекту на аспект одиниці пікселя (тобто aspect = x_res / y_res = ((x_max - x_min) / data.shape[1]) / ((y_max - y_min) / data.shape[0])
) завжди давало б квадратний кольоровий піксель. Ми можемо змінити аспект = 1,5 так, щоб одиниця осі х в 1,5 рази перевищувала осі осі, що веде до квадратного кольорового пікселя та квадратної цілої фігури, але прямокутної піксельної одиниці. Очевидно, це зазвичай не приймається.
data=rng.randn(10,10)
plt.imshow(data, origin = 'lower', extent = [0, 15, 0, 10], aspect = 1.5)
Найбільш небажаним випадком є встановлення аспекту довільного значення, наприклад 1,2, що не призведе ні до квадратних одиниць пікселів, ні до квадратних пікселів кольору.
plt.imshow(data, origin = 'lower', extent = [0, 15, 0, 10], aspect = 1.2)
Коротше кажучи, завжди достатньо встановити правильний розмір і нехай matplotlib робить решту речей за нас (хоча x_res! = Y_res)! Змінюйте аспект лише тоді, коли це необхідно.
scalar
варіант. Здається, це масштабуєтьсяy-axis
за заданим скаляром.