Невозможно отменить xticks внутри subplot matplotlib

1

Я разработал подзаговор с использованием matplotlib. Я пытаюсь обратить вспять xticks сюжета. Пожалуйста, смотрите образец code-

import numpy as np
import matplotlib.pyplot as plt

# generate the data
n = 6
y = np.random.randint(low=0, high=10, size=n)
x = np.arange(n)

# generate the ticks and reverse it
xticks = range(n)
xticks.reverse()

# plot the data
plt.figure()
ax = plt.subplot(111)
ax.bar(x, y)
print xticks # prints [5, 4, 3, 2, 1, 0]
ax.set_xticks(xticks)
plt.show()

Пожалуйста, смотрите ниже сгенерированный plot- Изображение 174551

Пожалуйста, обратите внимание на xticks. Хотя используется ax.set_xticks(xticks) но xticks не изменились. Я пропускаю какой-то вызов функции, чтобы перерисовать сюжет?

Ниже приведена система information-

matplotlib.__version__
'2.1.1'

matplotlib.__version__numpy__
'1.7.1'

python --version
Python 2.7.15rc1

Обратите внимание, что я просто хочу поменять галочки и не хочу инвертировать оси.

Теги:
matplotlib

3 ответа

3
Лучший ответ

С помощью ax.set_xticks вы в настоящее время указываете позиции ax.set_xticks, которые не ax.set_xticks по порядку списка. Либо вы проходите [0, 1, 2, 3, 4, 5] либо вы проходите [5, 4, 3, 2, 1, 0]. Разницы не будет замечено в галочках. Вместо этого вам нужно иметь обратные метки, для которых вы должны сделать set_xticklabels(xticks[::-1]). Есть два способа сделать это:

Способ 1

Используйте plt.xticks где первый аргумент указывает расположение галочек, а второй аргумент указывает соответствующие метки. В частности, xticks предоставит позиции для xticks[::-1] а xticks[::-1] ваш график обратными метками.

xticks = range(n)

# plot the data
plt.figure()
ax = plt.subplot(111)
ax.bar(x, y)

plt.xticks(xticks, xticks[::-1])

Способ 2, используя ax где вам нужно set_xticklabels чтобы получить то, что вы хотите

ax.set_xticks(xticks)
ax.set_xticklabels(xticks[::-1])

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

  • 0
    Большое спасибо за объяснение! Я понял свою ошибку. Мне понравился Путь 2 .
  • 0
    @RaviJoshi: Добро пожаловать. Рад помочь. Первый подход, однако, прямой
1

Использование:

# generate the data
n = 6
y = np.random.randint(low=0, high=10, size=n)
x = np.arange(n)

# generate the ticks and reverse it
xticks = range(n)
# xticks.reverse()

# plot the data
plt.figure()
ax = plt.subplot(111)
ax.bar(x, y)
# print xticks # prints [5, 4, 3, 2, 1, 0]
ax.set_xticklabels(xticks[::-1])          # <- Changed
plt.show()

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

  • 0
    Спасибо! Это работает, однако, я не мог понять следующее: изменил range(n) на range(n + 1)
  • 0
    n + 1 здесь не нужен. range (6) генерирует 0, 1, 2, 3, 4, 5. Это все, что нужно OP. range(7) будет генерировать 0, 1, 2, 3, 4, 5, 6. Здесь 6 не требуется
Показать ещё 5 комментариев
-2

Вы также можете изменить порядок оси ax.set_xlim([5.5, -0.5])

import numpy as np
import matplotlib.pyplot as plt

n = 6
x = np.arange(n)
y = (x+1) **(1/2)

fig, axs = plt.subplots(1, 3, constrained_layout=True)
axs[0].bar(x, y)
axs[0].set_title('Original data')

axs[1].bar(x[::-1], y)
axs[1].set_xlim(5.5, -0.5)
axs[1].set_title('x index reversed\nand axis reversed')

axs[2].bar(x, y)
axs[2].set_xlim(5.5, -0.5)
axs[2].set_title('just axis reversed')

plt.show()

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

  • 0
    Не уверен, почему это было отклонено - это правильный способ поменять порядок тиков, а не менять все метки.

Ещё вопросы

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