Matplotlib colorbar - изменено поведение для лимитов - PullRequest
3 голосов
/ 02 апреля 2019

Я пытаюсь ограничить диапазон цветовой шкалы, используя matplotlib.Старое поведение заключалось в том, что цветовая шкала могла быть масштабирована с использованием ключевых слов vmin и vmax функции plot.Это повлияло как на сам цвет, так и на метки цветовой шкалы.

Теперь похоже, что масштабируется только цвет, а метки остаются автоматическими.

import numpy
import numpy.random
import matplotlib.pyplot as plt

# create somehing to plot, maximum value should be much large than 10
z = numpy.random.rand(20, 20) * 57.8412
t = numpy.linspace(0, 1, 20)
x, y = numpy.meshgrid(t, t)

# this is supposed to be the maximum value of the plot
max_value = 25 # or 100

fig = plt.figure()
axis = fig.add_subplot(1, 1, 1)

plot = axis.contourf(x, y, z, 100, cmap=None, vmin=0, vmax=max_value)
cbar = plt.colorbar(plot)

plt.show(block=False)

Метки цветовой полосы остаются одинаковыми для обоих изображений (до 58), хотя максимальное значение должно быть либо 25 для первого изображения, либо 100 для второго.

Как восстановитьудерживать поведение, а также масштабировать метки цветовой шкалы.

max_value = 100

max_value = 25

Ответы [ 2 ]

0 голосов
/ 02 апреля 2019

Я не уверен, что понимаю желаемый результат, но я думаю, что вы бы хотели установить уровни явно.

import numpy as np
import matplotlib.pyplot as plt

# create somehing to plot, maximum value should be much large than 10
z = np.random.rand(20, 20) * 57.8412
t = np.linspace(0, 1, 20)
x, y = np.meshgrid(t, t)

# this is supposed to be the maximum value of the plot
max_value = 25 # or 100

fig, ax = plt.subplots()
ax.set_title(f"max_value={max_value}")
cntr = ax.contourf(x, y, z, levels=np.arange(max_value+1), vmin=0, vmax=max_value)
cbar = fig.colorbar(cntr)

plt.show()

enter image description here

enter image description here

0 голосов
/ 02 апреля 2019

Проблема в том, что ваши значения в z больше 25. Если вы хотите ограничить значения шкалы 25 или меньше, вам нужно либо обрезать значения в z, которые больше 25, либо удалить их, прежде чем сделатьplot.

Вот пример усечения значений от z до 25 или меньше:

import numpy
import numpy.random
import matplotlib.pyplot as plt

znew = z
znew[z > 25] = 25

t = numpy.linspace(0, 1, 20)
x, y = numpy.meshgrid(t, t)

# this is supposed to be the maximum value of the plot
max_value = 25 # or 100

fig = plt.figure()
axis = fig.add_subplot(1, 1, 1)

plot = axis.contourf(x, y, znew, 100, cmap=None, vmin=0, vmax=max_value)
cbar = plt.colorbar(plot)

plt.show(block=False)

Contour plot with truncated z values

В качестве альтернативы выможно просто удалить эти значения, установив их на NaN:

znew = z
znew[z > 25] = numpy.nan

t = numpy.linspace(0, 1, 20)
x, y = numpy.meshgrid(t, t)

# this is supposed to be the maximum value of the plot
max_value = 25 # or 100

fig = plt.figure()
axis = fig.add_subplot(1, 1, 1)

plot = axis.contourf(x, y, znew, 100, cmap=None, vmin=0, vmax=max_value)
cbar = plt.colorbar(plot)

plt.show(block=False)

image 25 removed">

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