#python #matplotlib #plot #limits
#python #matplotlib #график #ограничения
Вопрос:
Возможно, этот вопрос уже существует, но я не смог его найти.
Я создаю точечный график на Python. В иллюстративных целях я не хочу устанавливать диапазон своих осей таким образом, чтобы все точки были включены — могут быть какие-то действительно высокие или действительно низкие значения, и все, что меня волнует в этих точках, это то, что они существуют, то есть они должны быть на графике, но не на их фактическомзначение — скорее, где-то в верхней части холста.
Я знаю, что в IDL для этого есть хороший короткий синтаксис: в plot(x,y<value)
любом значении в y, большем, чем value
будет просто указано y=value
.
Я ищу что-то подобное в Python. Может кто-нибудь мне помочь?
Ответ №1:
вы можете просто использовать np.minimum
y
данные, чтобы установить что-либо выше вашего верхнего предела на этот предел. np.minimum
вычисляет минимумы по элементам, поэтому ymax
будут установлены только те значения, которые больше, чем ymax
.
Например:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0., np.pi*2, 30)
y = 10. * np.sin(x)
ymax = 5
fig, ax = plt.subplots(1)
ax.scatter(x, np.minimum(y, ymax))
plt.show()
Комментарии:
1. Как я могу также установить нижний предел? Как я пробовал это xmin = 0.8, xmax = 0.18 и plt.(np.minimum(x, xmin, xmax), y), но это не сработало.! @tom
Ответ №2:
В matplotlib нет эквивалентного синтаксического сахара. Вам нужно будет предварительно обработать ваши данные, например:
import numpy as np
import matplotlib.pyplot as plt
ymin, ymax = 0, 0.9
x, y = np.random.rand(2,1000)
y[y>ymax] = ymax
fig, ax = plt.subplots(1,1)
ax.plot(x, y, 'o', ms=10)
ax.set_ylim(ymin, ymax)
plt.show()