Подтвердить что ты не робот

Маркеры на границах участка, отрезанные в matplotlib

Я хочу сделать график разброса с использованием matplotlib. Если я хочу использовать какой-либо маркер, поведение графика matplotlib по умолчанию выводит левую половину маркера в левой части графика, а правую сторону маркера в правой части графика. Я искал самый автоматический способ добавить дополнительное пространство в левую и правую части сюжета без добавления дополнительных меток ярлыков, поэтому мои маркеры не обрезаются, и это также не похоже на ярлыки x-tick которые не соответствуют никаким точкам.

from matplotlib import pyplot as plt
import numpy as np
xx = np.arange(10)
yy = np.random.random( 10 )
plt.plot(xx, yy, 'o' )

Этот код приводит к графику, который выглядит так:

enter image description here

Мне нужны полные круги в x = 0 и x = 4.5, но я не хочу больше тиковых меток, и я бы хотел, чтобы код был как можно короче и авторизован.

4b9b3361

Ответ 1

Вам нужно будет написать код для этого, но вам не нужно заранее знать какие-либо данные. Другими словами, xx может измениться, и это все равно будет работать, как вы ожидаете (я думаю).

В принципе, вам нужны метки x-tick, которые у вас есть, но вам не нравятся ограничения. Поэтому напишите код на

  • сохранить тики,
  • отрегулируйте пределы и
  • Восстановить старые тики.

from matplotlib import pyplot as plt
import numpy as np
xx = np.arange(10)
np.random.seed(101)
yy = np.random.random( 10 )
plt.plot(xx, yy, 'o' )
xticks, xticklabels = plt.xticks()
# shift half a step to the left
# x0 - (x1 - x0) / 2 = (3 * x0 - x1) / 2
xmin = (3*xticks[0] - xticks[1])/2.
# shaft half a step to the right
xmax = (3*xticks[-1] - xticks[-2])/2.
plt.xlim(xmin, xmax)
plt.xticks(xticks)
plt.show()

Это приводит к следующему рисунку: enter image description here

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


Другой вариант - отключить обрезку строки, используя ключевое слово clip_on: plt.plot(xx, yy, 'o', clip_on=False):

enter image description here

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