Нужна помощь в понимании того, как работает система осей xycoord в matplotlib

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

Начиная с системы осей, при аннотировании я получил вот что:

from matplotlib import pyplot as plt
fig,ax = plt.subplots( figsize=(5,5), dpi=300)


ax.set_xlim(0,100)
ax.set_ylim(0,1000)
# -- Annotations --------------------------------

#coordinate system same as data xy = (100,1000)
ax.annotate(
    xy=(80,800),
    text='*1 -data',
    ha='left', va='top',
    xycoords = "data" 
)
#coordinates system xy = (0,1) from the axes
ax.annotate(
    xy=(0.5,1.1),
    text='*2 - axes fraction',
    ha='left', va='top',
    xycoords='axes fraction'  
)

#combine data and axes fraction
ax.annotate(
    xy=(30,0.5), #x = 30 and y is the middle of y axes
    text='*3 -data, axes fraction',
    ha='left', va='top',
    xycoords=('data','axes fraction')  
)

#coordinates system xy = (?,?) from the axes
ax.annotate(
    xy=(50,50),
    text='*4 - axes points',
    ha='left', va='top',
    xycoords='axes points' 
)

#coordinates system xy = (?,?) from the axes
ax.annotate(
    xy=(750,750),
    text='*5 - axes pixels',
    ha='left', va='top',
    xycoords='axes pixels'  
)

#annotation for the points coordinate system and xy locations.
t = "Footnotes:\n(1) data, coord @ (100,1000), plotted @ (80,800)\n(2) axes fraction, coord @ (0,1), plotted @ (0.5,1.1)\n(3) data,axes points combined, coord @ x=(0,100), y=(0,1) plotted @ (30,0.5)\n(4) axes points coord @ (?,?) plotted @ (50,50)\n(5)axes pixels, coord @ (?,?) plotted @ (750,750)"
ax.annotate(
    xy=(0,-0.1),
    text = t,
    ha = "left", va= "top", color = "grey",
    xycoords = "axes fraction"
)

Что генерирует это:

Очевидно, я прочитал документацию, но до сих пор не понял этого:

  1. Почему, когда я указываю координаты xy вне осей (пример 2), они все равно отображаются на графике? Я ожидал, что мне придется использовать annotation_clip.

  2. Каковы координаты системы точек осей? Полностью потерялся в этом вопросе.

  3. Каковы координаты системы пикселей осей? Я знаю, что цифра 1500x1500, но как это переводится в оси? Я не ожидал, что там будет изображен пример 5.

Я думаю, что документация все четко объясняет. Вот ссылка, которая поможет вам с различными демо

Tino D 11.04.2024 10:44
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
73
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Каковы координаты системы точек осей? Полностью потерялся в этом вопросе.

Точки осей см. здесь: https://graphicdesign.stackexchange.com/a/207

Точка равна 1/72 дюйма. Вы указали 300 dpi, то есть 300 пикселей на дюйм - думаю, это технически не правильно, но вроде работает^{TM}. Вы разместили аннотацию в точке (50,50) по осям. Это 50/72 дюйма, или 50/72*300 пикселей от (0,0).

Каковы координаты системы пикселей осей? Я знаю, что цифра 1500x1500, но как это переводится в оси? Я не ожидал, что там будет изображен пример 5.

Пиксели осей — это просто пиксели осей, отсчитываемые снизу слева (0,0). Это не сразу очевидно из-за выбранной вами аннотации, но если вы аннотируете, например. используя только знак минус дважды: один слева, один справа, оба по центру по вертикали, вы должны увидеть, что точка находится на 750 пикселей вдоль.

ax.annotate(xy=(750, 750), text = "-", ha = "left", va = "center", xycoords = "axes pixels")
ax.annotate(xy=(750, 750), text = "-", ha = "right", va = "center", xycoords = "axes pixels")

Спасибо! Если я построю график 50/72*300 с использованием осей пикселей, он будет отображаться в той же позиции, так что это имеет смысл! Что касается объяснения осей пикселей, я нарисовал обе аннотации, но я до сих пор не понимаю, как работает 750? так как цифра 1500 на 1500, оси тоже одинаковые? и в этом случае я ожидаю, что он будет посередине, но он будет немного правее? Боюсь, я все еще в замешательстве. С фигурными осями он помещается посередине. Что мне не хватает?

ruthpozuelo 11.04.2024 13:12

750 пикселей отсчитываются от начала координат, т.е. точки (0,0). Это положение не будет посередине, но оно будет смещено на количество пикселей слева и ниже осей.

Anonymous 11.04.2024 14:46

ок, а как мне узнать середину осей или как узнать, насколько велико смещение? Спасибо за терпение, кстати

ruthpozuelo 11.04.2024 15:23

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

Anonymous 11.04.2024 15:48

Последний вопрос, обещаю! Что тогда было бы хорошим примером для осей пикселей? Может быть, он мало используется?

ruthpozuelo 11.04.2024 16:36

Например, при аннотировании фотографии или медицинского изображения. Вы будете знать пиксельные координаты любого объекта изображения за пределами Python, а затем сможете использовать эти внешние пиксельные координаты для аннотирования изображения в Python с помощью пикселей осей.

Anonymous 11.04.2024 17:48

Другие вопросы по теме