Использование другого набора данных для тиков с помощью matplotlib - PullRequest
0 голосов
/ 27 апреля 2020

У меня вопрос по поводу matplotblib в Python. Я работаю с набором данных, который имеет 30 сеансов. В каждой сессии от 0 до 5 прогонов. Я создал график, который отображает значения каждого прогона. Таким образом, пробеги go от 0-200. Тем не менее, мне нужно сбросить галочки при запуске нового запуска. Поэтому вместо 0-200 я хочу 0,1,2,3 ... 0,1,2 ... 0,1,2,3,4,5. Однако график, как он есть, не должен меняться. Ты хоть представляешь, как это возможно?

Код:

for ses in range(len(all_runs)):
        if len(all_runs[ses]) > 0:
            plt.plot(xval[ses],all_runs[ses],'.-',color='tab:blue')


Ответы [ 2 ]

1 голос
/ 27 апреля 2020

Вы можете передать аргумент labels в plt.xticks(), указав метки повторяющихся тиков, без изменения нанесенных данных. Например:

import matplotlib.pyplot as plt

n = 5  # number of ticks per run
r = 3  # number of runs

# sample plot
plt.plot(list(range(n * r)))
plt.xticks(list(range(n * r)))

# set repeating tick labels
ticks = list(plt.xticks()[0])
plt.xticks(ticks, labels = ticks[:n] * r); 

sample plot

0 голосов
/ 27 апреля 2020

Если я правильно понимаю вопрос, это то, как он будет работать. Необязательно, второстепенные тики могут указывать сессии.

import matplotlib.pyplot as plt
import numpy as np

xval = [np.array([0, 1, 2, 3, 4]), np.array([5, 6, 7, 8, 9, 10]), np.array([11, 12, 13, 14, 15, 16, 17])]
all_runs = [np.random.randint(1, 10, len(xv)) for xv in xval]
total_len = sum([len(xv) for xv in xval])

for ses in range(len(all_runs)):
    if len(all_runs[ses]) > 0:
        plt.plot(xval[ses], all_runs[ses], '.-', color='tab:blue')
        # if ses > 0:
        #    plt.axvline(xval[ses][0] - 0.5, ls=':', lw=1, color='purple')
plt.xticks(range(total_len), [i for xv in xval for i in range(len(xv))])
ax = plt.gca()
ax.set_xticks([xv[0] + 0.1 for xv in xval if len(xv) > 0], minor=True)
ax.set_xticklabels([f'session {i}' for i, xv in enumerate(xval) if len(xv) > 0], minor=True)
ax.tick_params(axis='x', which='minor', length=0, pad=18)
for tick in ax.xaxis.get_minor_ticks():
    tick.label1.set_horizontalalignment('left')
plt.show()

example plot

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