Я разработал подзаговор с использованием 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-
Пожалуйста, обратите внимание на xticks
. Хотя используется ax.set_xticks(xticks)
но xticks
не изменились. Я пропускаю какой-то вызов функции, чтобы перерисовать сюжет?
Ниже приведена система information-
matplotlib.__version__
'2.1.1'
matplotlib.__version__numpy__
'1.7.1'
python --version
Python 2.7.15rc1
Обратите внимание, что я просто хочу поменять галочки и не хочу инвертировать оси.
С помощью 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])
Использование:
# 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()
range(n)
на range(n + 1)
range(7)
будет генерировать 0, 1, 2, 3, 4, 5, 6. Здесь 6
не требуется
Вы также можете изменить порядок оси 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()