Вопрос-Ответ

Changing the tick frequency on the x or y axis

Изменение частоты тиков по оси x или y

Я пытаюсь исправить то, как python отображает мои данные. Скажем:

x = [0, 5, 9, 10, 15]
y = [0, 1, 2, 3, 4]

matplotlib.pyplot.plot(x, y)
matplotlib.pyplot.show()

Тики по оси x отображаются с интервалом в 5. Есть ли способ заставить его отображать интервалы в 1?

Переведено автоматически
Ответ 1

Вы могли бы явно указать, где вы хотите ставить галочки с помощью plt.xticks:

plt.xticks(np.arange(min(x), max(x)+1, 1.0))

Например,

import numpy as np
import matplotlib.pyplot as plt

x = [0,5,9,10,15]
y = [0,1,2,3,4]
plt.plot(x,y)
plt.xticks(np.arange(min(x), max(x)+1, 1.0))
plt.show()

(np.arange использовалась вместо range функции Python на всякий случай, min(x) и max(x) являются числами с плавающей запятой вместо целых чисел.)


Функция plt.plot (or ax.plot) автоматически установит значения по умолчанию x и y ограничения. Если вы хотите сохранить эти ограничения и просто изменить размер шага тиков, то вы могли бы использовать ax.get_xlim(), чтобы узнать, какие ограничения Matplotlib уже установил.

start, end = ax.get_xlim()
ax.xaxis.set_ticks(np.arange(start, end, stepsize))

Форматировщик тиков по умолчанию должен выполнять достойную работу по округлению значений тиков до разумного количества значащих цифр. Однако, если вы хотите иметь больший контроль над форматом, вы можете определить свой собственный форматировщик. Например,

ax.xaxis.set_major_formatter(ticker.FormatStrFormatter('%0.1f'))

Вот доступный для выполнения пример:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker

x = [0,5,9,10,15]
y = [0,1,2,3,4]
fig, ax = plt.subplots()
ax.plot(x,y)
start, end = ax.get_xlim()
ax.xaxis.set_ticks(np.arange(start, end, 0.712123))
ax.xaxis.set_major_formatter(ticker.FormatStrFormatter('%0.1f'))
plt.show()
Ответ 2

Другой подход заключается в установке локатора оси:

import matplotlib.ticker as plticker

loc = plticker.MultipleLocator(base=1.0) # this locator puts ticks at regular intervals
ax.xaxis.set_major_locator(loc)

Существует несколько различных типов локаторов в зависимости от ваших потребностей.

Вот полный пример:

import matplotlib.pyplot as plt
import matplotlib.ticker as plticker

x = [0,5,9,10,15]
y = [0,1,2,3,4]
fig, ax = plt.subplots()
ax.plot(x,y)
loc = plticker.MultipleLocator(base=1.0) # this locator puts ticks at regular intervals
ax.xaxis.set_major_locator(loc)
plt.show()
Ответ 3

Мне нравится это решение (из поваренной книги по построению графиков Matplotlib):

import matplotlib.pyplot as plt
import matplotlib.ticker as ticker

x = [0,5,9,10,15]
y = [0,1,2,3,4]

tick_spacing = 1

fig, ax = plt.subplots(1,1)
ax.plot(x,y)
ax.xaxis.set_major_locator(ticker.MultipleLocator(tick_spacing))
plt.show()

Это решение дает вам явный контроль над интервалом между тиками с помощью числа, заданного в ticker.MultipleLocater(), позволяет автоматически определять лимит и легко читается позже.

Ответ 4

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

ax.set_xticks(ax.get_xticks()[::2])
2023-08-17 11:33 python matplotlib