Можно ли нарисовать xticklabels поверх оси Xaxis?

1

Я хочу отметить конкретную позицию оси X цветной звездочкой, нарисованной сверху оси X.

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

MWE:

import numpy as np
import matplotlib.pyplot as plt

fig,ax=plt.subplots(1,1)

ax.scatter([-1,1],[1,1])
ax.set_xticks([0],minor=True)
ax.set_xticklabels(['*'],minor=True,color='r',fontsize=20,verticalalignment='center')

plt.setp(ax.spines.values(), linewidth=3)

plt.show()

Вот как это выглядит прямо сейчас:

Изображение 174551

  • 0
    Что не так с выходом у вас сейчас? Проблема не ясна из вашего вопроса
  • 0
    Я хочу, чтобы звездочка была выше оси. Прямо сейчас ось покрывает часть символа, я хочу, чтобы она была наоборот. Это более очевидно с более толстой осью, хотя.
Показать ещё 1 комментарий
Теги:
matplotlib
alignment

2 ответа

1

То, что вы ищете, это параметр zorder. Используя zorder = 0, вы в основном определяете порядок наложения последовательности графика. 0 отправит ось/рамку в фоновом режиме, поместив звездочку над линией оси по желанию. Я увеличил размер звездочки, чтобы выделить его.

ax.scatter([-1,1],[1,1])
ax.set_xticks([0],minor=True)
ax.set_xticklabels(['*'],minor=True,color='r',fontsize=30,verticalalignment='center')

plt.setp(ax.spines.values(), linewidth=3, zorder=0)

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

ax.set_xticklabels(['*'],minor=True,color='r',fontsize=30,verticalalignment='center', zorder=2)
plt.setp(ax.spines.values(), linewidth=3, zorder=1)

Изображение 174551

  • 0
    Спасибо, это было именно то, что мне было нужно
  • 0
    @Jonathan: Если вы найдете ответ полезным, вы можете пометить его как принятый. Так как это был ваш первый вопрос, вы должны прочитать это
0

Вы можете указать координаты рассеяния в смешанной системе (координаты данных для оси y и координаты оси для оси x).
Чтобы маркер рассеяния находился над шипами, установите для свойства zorder разброса значение выше 2,5.

import matplotlib.pyplot as plt

fig,ax=plt.subplots(1,1)

ax.scatter([-1,1],[1,1])
ax.scatter(0,0, s=100, marker="*", color="red", 
           transform=ax.get_xaxis_transform(), clip_on=False, zorder=3)

plt.show()

Изображение 174551

  • 0
    Спасибо, это действительно хорошее решение использовать разные маркеры

Ещё вопросы

Сообщество Overcoder
Наверх
Меню