Matplotlib: inset_axes, поле масштабирования неправильно показывает бары - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь создать масштабное окно, которое должно показывать меньший участок большего размера.

К сожалению, метки и полосы не расположены правильно в окне. Бар Test5 начинается прямо в нулевой точке и выходит из графика c. Та же проблема существует с Test8.

Как вы можете переместить метки и полосы, чтобы все было видно внутри коробки?

На рисунке здесь показано текущее состояние. Код выглядит так:

fig, ax = plt.subplots(figsize=(10, 8))
overview_data_x = ['Test1', 'Test2', 'Test3', 'Test4', 'Test5', 'Test6', 'Test7', 'Test8']
overview_data_y = [2500, 4100, 3900, 2000, 15, 75, 10, 25]

color = ['darkgrey', 'crimson', 'darkgreen', 'royalblue', 'orchid', 'y', 'peru', 'c']

ax.bar(overview_data_x, overview_data_y, color=color, align='center')
ax.set_ylabel('MB/s')

axins = inset_axes(ax, width="50%", height=1.5, loc=1)
axins.bar(overview_data_x, overview_data_y, color=color, align='center')

x1, x2 = 'Test5', 'Test8'
y1, y2 = 0, 100
axins.set_xlim(x1, x2) 
axins.set_ylim(y1, y2)

mark_inset(ax, axins, loc1=3, loc2=4, fc="none", ec="0.5")

1 Ответ

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

Когда вы рисуете столбчатую диаграмму, столбцы расширяются от index-width / 2 до index + width / 2, где index - целое число [0,1, ..., N_of_bars-1]. По умолчанию ширина равна 0,8, поэтому полосы не совсем соприкасаются друг с другом. Если вы хотите видеть целые бары во вставке, вам необходимо учитывать ширину баров:

fig, ax = plt.subplots(figsize=(10, 8))
overview_data_x = ['Test1', 'Test2', 'Test3', 'Test4', 'Test5', 'Test6', 'Test7', 'Test8']
overview_data_y = [2500, 4100, 3900, 2000, 15, 75, 10, 25]

color = ['darkgrey', 'crimson', 'darkgreen', 'royalblue', 'orchid', 'y', 'peru', 'c']

ax.bar(overview_data_x, overview_data_y, color=color, align='center')
ax.set_ylabel('MB/s')

axins = inset_axes(ax, width="50%", height=1.5, loc=1)
axins.bar(overview_data_x, overview_data_y, color=color, align='center')

# BELOW IS THE ONLY LINE THAT I CHANGED
x1, x2 = overview_data_x.index('Test5')-0.5, overview_data_x.index('Test8')+0.5
y1, y2 = 0, 100
axins.set_xlim(x1, x2) 
axins.set_ylim(y1, y2)

mark_inset(ax, axins, loc1=3, loc2=4, fc="none", ec="0.5")

enter image description here

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