Невозможно отменить xticks внутри subplot matplotlib - PullRequest
0 голосов
/ 02 января 2019

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

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()

Пожалуйста, смотрите ниже сгенерированного сюжета- enter image description here

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

Ниже приведена системная информация-

matplotlib.__version__
'2.1.1'

matplotlib.__version__numpy__
'1.7.1'

python --version
Python 2.7.15rc1

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

Ответы [ 3 ]

0 голосов
/ 02 января 2019

С 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 = range(n)

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

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

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

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

enter image description here

0 голосов
/ 10 января 2019

Вы также можете изменить порядок оси 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()

enter image description here

0 голосов
/ 02 января 2019

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

# 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()

out

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...