Как изменить xticks и yticks графика регистрации журнала после ScalarFormatter? - PullRequest
0 голосов
/ 07 января 2019

У меня есть этот код:

 # Modules I import 

    import matplotlib
    if os.environ.get('DISPLAY','') == '':
        print('no display found. Using non-interactive Agg backend')
        matplotlib.use('Agg')
    import matplotlib.pyplot as plt
    from matplotlib.ticker import ScalarFormatter
    from pylab import *

# My Variables to plot

    ideal_walltime_list = [135.82, 67.91, 33.955, 16.9775, 8.48875]
    cores_plotting = [16, 32, 64, 128, 256]
    time_plotting = [135.82, 78.69, 50.62, 46.666, 42.473]

# My plotting part
    plt.figure()
    plt.scatter(cores_plotting, time_plotting, c='r', label='System wall time')
    plt.plot(cores_plotting, ideal_walltime_list, c='k', label='Ideal Wall time')

    plt.title('109bEdec_test')
    plt.ylabel('Wall time (s)')

    plt.xlabel('Cores')
    plt.legend(loc='upper right')
    plt.yscale('log')
    plt.xscale('log')

    ax = gca().xaxis
    ax.set_major_formatter(ScalarFormatter())
    ax.set_minor_formatter(ScalarFormatter())

    ay = gca().yaxis
    ay.set_major_formatter(ScalarFormatter())
    ay.set_minor_formatter(ScalarFormatter())
    plt.savefig('109bEdec_test' + '.png',dpi=1800)


    plt.show()

Когда я запускаю этот код, мой график выглядит так:

enter image description here

Однако мне нужны оси x и y для отображения галочек, соответствующих моей переменной cores_plotting, а не всех тех чисел, которые имеют плохое форматирование. Я пытался использовать:

plt.xticks(cores_plotting)
plt.yticks(cores_plotting)

Но безуспешно.

Также я попробовал:

plt.xticks(cores_plotting, ('16', '32', '64', '128', '256'))
plt.yticks(cores_plotting, ['16', '32', '64', '128', '256'])

Но успеха тоже нет. Прямо сейчас мне просто нужно иметь элементы cores_plotting в качестве моих тиков X и Y.

Моя версия на python 3.6.5 и моя версия Matplotlib 3.0.2.

Спасибо!

1 Ответ

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

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

fig, ax = plt.subplots()
plt.scatter(cores_plotting, time_plotting, c='r', label='System wall time')
plt.plot(cores_plotting, ideal_walltime_list, c='k', label='Ideal Wall time')

# Rest of your code here

ax.set_yticks(cores_plotting) 
ax.set_yticklabels(['16', '32', '64', '128', '256'])

ax.set_xticks(cores_plotting) 
ax.set_xticklabels(['16', '32', '64', '128', '256'])

for xticks in ax.xaxis.get_minor_ticks():
    xticks.label1.set_visible(False)
    xticks.set_visible(False)

for yticks in ax.yaxis.get_minor_ticks():
    yticks.label1.set_visible(False)
    yticks.set_visible(False)

Выпуск версии Matplotlib

Кажется, что следующие команды не работают в matplotlib 3+ версии и выдают

TypeError: ошибка 'list' объект не вызывается`.

В таком случае используйте вышеуказанный метод для назначения тиков и меток тиков.

plt.xticks(cores_plotting, ['16', '32', '64', '128', '256']);
plt.yticks(cores_plotting, ['16', '32', '64', '128', '256'])

enter image description here

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