Конфигурирование линий сетки в сюжете matplotlib - PullRequest
0 голосов
/ 24 января 2019

Рассмотрите рисунок ниже.

enter image description here

Это изображение было настроено со следующим кодом.

  plt.rc('text', usetex=True)
  plt.rc('font', family='serif')
  fig, ax = plt.subplots()

  ax.set_xlabel("Run Number", fontsize=25)

  plt.grid(True, linestyle='--')
  plt.tick_params(labelsize=20)
  ax.set_xticklabels(map(str,range(number_of_runs)))
  ax.minorticks_on()

  ax.set_ylim([0.75,1.75])

Я не включил код, который фактически генерирует данные для построения графика для ясности.

В отличие от диаграммы выше, я хотел бы нарисовать линии сетки перпендикулярно оси X через каждую оранжевую (и, следовательно, синюю) точку.Как мне это сделать?Х-координаты последовательных оранжевых и синих точек образуют одинаковую арифметическую прогрессию в моем коде.

Также я замечаю, что номера тиков с номерами 1,2, ... не подходят для моего приложения.Вместо этого я бы хотел, чтобы каждая последующая линия сетки, которую я просил перпендикулярно оси X на предыдущем шаге, была пронумерована последовательно от 1 вдоль оси X.Как мне настроить метки Xtick для этого?

Ответы [ 2 ]

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

Линии сетки пересекают xticks (или yticks).Вам нужно правильно определить xticks, чтобы линии сетки пересекали ваши точки данных (точки)

Пример ниже:

import matplotlib.pyplot as plt
fig, ax = plt.subplots()
number_of_runs = range(1,10)    # use your actual number_of_runs
ax.set_xticks(number_of_runs, minor=False)
ax.xaxis.grid(True, which='major')

Если вы хотите иметь только вертикальные линии, добавьте это:

ax.yaxis.grid(False, which='major')

Подобный вопрос здесь .

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

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

Я строю несколько двух случайных массивов в следующем примере:

plt.rc('text', usetex=True)
plt.rc('font', family='serif')

y1 = np.random.random(10)
y2 = np.random.random(10)

fig, ax = plt.subplots(ncols=2, figsize=(8, 3))

# equivalent to your figure
ax[0].plot(y1, 'o-') 
ax[0].plot(y2, 'o-')
ax[0].grid(True, linestyle='--')
ax[0].set_title('Before')

# hopefully what you want
ax[1].plot(y1, 'o-')
ax[1].plot(y2, 'o-')
ax[1].set_title('After')
ax[1].set_xticks(range(0, len(y1)))
ax[1].set_xticklabels(range(1, len(y1)+1))
ax[1].grid(True, linestyle='--')

plt.show()

Это вывод: enter image description here

Примечание:Глядя на ваш график, кажется, что фактическая ось x не является целым числом, но вы хотите, чтобы целые числа начинались с 1. Вероятно, лучший способ сделать это - просто передать массив данных оси y в качестве аргумента для команды plot (plt.plot(y) вместо plt.plot(x, y), как я делал выше. Вам следует решить, подходит ли это для вашего случая.

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