Логарифмическая цветовая шкала и цветовая шкала для контура - PullRequest
0 голосов
/ 20 марта 2019

Я разработал следующую MWE с данными, которые распространяются на две очень разные шкалы. Я хотел бы сделать контурную диаграмму, которая позволяет красиво визуализировать данные.

from matplotlib import ticker
import numpy as np               
import matplotlib.pyplot as plt 
data = np.random.rand(25,25)
data2 = np.random.rand(25,25)*1e-32
data = np.hstack([data,data2])
xGrid, yGrid = np.meshgrid(np.linspace(0,1,data.shape[1]),np.linspace(0,1,data.shape[0]))

levels=np.logspace(np.log10(1e-6),np.log10(2),100)
locator = ticker.LogLocator(base=10)
cs = plt.contourf(xGrid, yGrid, data, levels, vmin = 1e-6, vmax = 2, locator=locator)
plt.colorbar(cs, ticks=locator)

С приведенным выше кодом я получаю: enter image description here

Я не понимаю, почему половина значений пуста

1 Ответ

2 голосов
/ 20 марта 2019

Хорошо, я выяснил, в чем проблема, благодаря другому посту .Нужно использовать опцию extension = "both".К сожалению, эта опция не работает с логарифмическими масштабами.

Решение состоит в том, чтобы вручную изменить масштаб диапазона данных.Пример приведен ниже:

from matplotlib import ticker
import numpy as np               
import matplotlib.pyplot as plt 
data = np.random.rand(25,25)
data2 = np.random.rand(25,25)*1e-32
data = np.hstack([data,data2])
xGrid, yGrid = np.meshgrid(np.linspace(0,1,data.shape[1]),np.linspace(0,1,data.shape[0]))

levels=np.logspace(np.log10(1e-16),np.log10(2),100)
locator = ticker.LogLocator(base=10)

#mask data
dataMasked = np.where(data < 1e-16, 1e-16, data)

cs = plt.contourf(xGrid, yGrid, dataMasked, levels, vmin = 1e-16, vmax = 2, extend="both", locator=locator)
plt.colorbar(cs, ticks=locator)
...