Как убрать числовые x-метки под пользовательскими метками в блокпосте matplotlib? - PullRequest
0 голосов
/ 31 октября 2019

Я хочу построить несколько коробочных диаграмм (используя matplotlib в python3) на одной фигуре и пометить их соответственно вдоль оси x. Я пробовал несколько методов для установки пользовательских x-тиков, но старые числовые тики всегда просвечивают.

Следующие два фрагмента кода дают одинаковый результат. В первом я использую plt.xticks(ticks, labels, rotation='vertical'), чтобы установить галочки (также не работает при вращении). В обоих случаях compressed_runs - это диктовка, в которой ключи совпадают с метками x-ticks, а значения являются числовыми массивами.

plt.figure(figsize=[10, 8], dpi=300)
labels = ['test']*len(compressed_runs)
ticks = [i+1 for i, v in enumerate(compressed_runs)]

plt.xticks(ticks, labels, rotation='vertical')
plt.ylabel('communication times [µs]')
plt.title('Test title')

plt.boxplot(compressed_runs.values(), showfliers=False)
plt.savefig(plotname)
plt.close()

Я также пытался изменить оси рисунка напрямую:

fig = plt.figure(figsize=[10, 8], dpi=300)
labels = ['test']*len(compressed_runs)
ticks = [i+1 for i, v in enumerate(compressed_runs)]

plt.xticks(ticks, labels, rotation='vertical')
fig.axes[0].set_xticklabels(labels)
plt.ylabel('communication times [µs]')
plt.title('Test title')

plt.boxplot(compressed_runs.values(), showfliers=False)
plt.savefig(plotname)
plt.close()

obscured x-ticks

Как вы можете видеть на рисунке, перечисленные x-тики все еще видны из-под названных x-тиков. В этом случае я ожидаю, что только «test» будет находиться под каждым боксплотом.

1 Ответ

0 голосов
/ 31 октября 2019

Проблема оказалась в порядке вызовов функций. plt.xticks(ticks, labels) должен называться после создания боксплота, а не до. Числовые метки были поведением боксплота по умолчанию, которое было напечатано на этикетках, которые были явно установлены ранее. В рабочем коде у меня тогда было:

plt.boxplot(compressed_runs.values(), showfliers=False)
plt.xticks(ticks, labels, rotation='vertical')

вместо

plt.xticks(ticks, labels, rotation='vertical')
plt.boxplot(compressed_runs.values(), showfliers=False)
...