Добавление финальных штрихов к графику с разрывной осью
На этом последнем этапе мы добавим финальные штрихи к нашему графику с разрывной осью, чтобы было ясно, что ось Y разорвана. Мы добавим диагональные линии между подграфиками, чтобы показать разрыв, и улучшим общий вид графика с помощью правильных подписей и сетки.
Добавление диагональных линий разрыва
Для визуального обозначения разрыва оси мы добавим диагональные линии между двумя подграфиками. Это распространенная практика, которая помогает зрителям понять, что часть оси была опущена.
Создайте новую ячейку и добавьте следующий код:
## Создание двух подграфиков, расположенных вертикально с общей осью x
fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True, figsize=(8, 6))
## Построение одних и тех же данных на обеих осях
ax1.plot(pts, 'o-', color='blue')
ax2.plot(pts, 'o-', color='blue')
## Установка пределов оси Y для каждого подграфика
ax1.set_ylim(0.78, 1.0) ## Верхний подграфик показывает только выбросы
ax2.set_ylim(0, 0.22) ## Нижний подграфик показывает только основные данные
## Скрытие осей между ax1 и ax2
ax1.spines.bottom.set_visible(False)
ax2.spines.top.set_visible(False)
## Настройка положения делений
ax1.xaxis.tick_top() ## Перемещение делений оси x вверх
ax1.tick_params(labeltop=False) ## Скрытие подписей делений оси x сверху
ax2.xaxis.tick_bottom() ## Оставление делений оси x снизу
## Добавление диагональных линий разрыва
d = 0.5 ## пропорция вертикального и горизонтального размера наклонной линии
kwargs = dict(marker=[(-1, -d), (1, d)], markersize=12,
linestyle='none', color='k', mec='k', mew=1, clip_on=False)
ax1.plot([0, 1], [0, 0], transform=ax1.transAxes, **kwargs)
ax2.plot([0, 1], [1, 1], transform=ax2.transAxes, **kwargs)
## Добавление подписей и заголовка
ax2.set_xlabel('Data Point Index')
ax2.set_ylabel('Value')
ax1.set_ylabel('Value')
fig.suptitle('Dataset with Outliers', fontsize=16)
## Добавление сетки к обоим подграфикам для лучшей читаемости
ax1.grid(True, linestyle='--', alpha=0.7)
ax2.grid(True, linestyle='--', alpha=0.7)
plt.tight_layout()
plt.subplots_adjust(hspace=0.1) ## Настройка расстояния между подграфиками
plt.show()
При запуске этой ячейки вы должны увидеть полноценный график с разрывной осью с диагональными линиями, указывающими на разрыв оси Y. Теперь график имеет заголовок, подписи осей и сетку для улучшения читаемости.
Понимание графика с разрывной осью
Давайте немного разберемся в ключевых компонентах нашего графика с разрывной осью:
- Два подграфика: Мы создали два отдельных подграфика, каждый из которых сосредоточен на разном диапазоне значений оси Y.
- Скрытые оси: Мы скрыли соединяющие оси между подграфиками, чтобы создать визуальное разделение.
- Диагональные линии разрыва: Мы добавили диагональные линии, чтобы показать, что ось разорвана.
- Предельные значения оси Y: Мы установили разные предельные значения оси Y для каждого подграфика, чтобы сосредоточиться на определенных частях данных.
- Сетка: Мы добавили сетку, чтобы улучшить читаемость и облегчить оценку значений.
Эта техника особенно полезна, когда в ваших данных есть выбросы, которые иначе сжимали бы визуализацию большинства точек данных. "Разрыв" оси позволяет ясно показать как выбросы, так и основное распределение данных на одной фигуре.
Эксперименты с графиком
Теперь, когда вы понимаете, как создать график с разрывной осью, вы можете поэкспериментировать с разными настройками. Попробуйте изменить предельные значения оси Y, добавить больше элементов на график или применить эту технику к своим собственным данным.
Например, вы можете изменить предыдущий код, чтобы добавить легенду, изменить цветовую схему или настроить стили маркеров:
## Создание двух подграфиков, расположенных вертикально с общей осью x
fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True, figsize=(8, 6))
## Построение одних и тех же данных на обеих осях с разными стилями
ax1.plot(pts, 'o-', color='darkblue', label='Data Points', linewidth=2)
ax2.plot(pts, 'o-', color='darkblue', linewidth=2)
## Отметка выбросов другим цветом
outlier_indices = [3, 14]
ax1.plot(outlier_indices, pts[outlier_indices], 'ro', markersize=8, label='Outliers')
## Установка пределов оси Y для каждого подграфика
ax1.set_ylim(0.78, 1.0) ## Верхний подграфик показывает только выбросы
ax2.set_ylim(0, 0.22) ## Нижний подграфик показывает только основные данные
## Скрытие осей между ax1 и ax2
ax1.spines.bottom.set_visible(False)
ax2.spines.top.set_visible(False)
## Настройка положения делений
ax1.xaxis.tick_top() ## Перемещение делений оси x вверх
ax1.tick_params(labeltop=False) ## Скрытие подписей делений оси x сверху
ax2.xaxis.tick_bottom() ## Оставление делений оси x снизу
## Добавление диагональных линий разрыва
d = 0.5 ## пропорция вертикального и горизонтального размера наклонной линии
kwargs = dict(marker=[(-1, -d), (1, d)], markersize=12,
linestyle='none', color='k', mec='k', mew=1, clip_on=False)
ax1.plot([0, 1], [0, 0], transform=ax1.transAxes, **kwargs)
ax2.plot([0, 1], [1, 1], transform=ax2.transAxes, **kwargs)
## Добавление подписей и заголовка
ax2.set_xlabel('Data Point Index')
ax2.set_ylabel('Value')
ax1.set_ylabel('Value')
fig.suptitle('Dataset with Outliers - Enhanced Visualization', fontsize=16)
## Добавление сетки к обоим подграфикам для лучшей читаемости
ax1.grid(True, linestyle='--', alpha=0.7)
ax2.grid(True, linestyle='--', alpha=0.7)
## Добавление легенды к верхнему подграфику
ax1.legend(loc='upper right')
plt.tight_layout()
plt.subplots_adjust(hspace=0.1) ## Настройка расстояния между подграфиками
plt.show()
При запуске этого улучшенного кода вы должны увидеть улучшенную визуализацию с отдельно отмеченными выбросами и легендой, объясняющей точки данных.
Поздравляем! Вы успешно создали график с разрывной осью на Python с использованием Matplotlib. Эта техника поможет вам создавать более эффективные визуализации при работе с данными, содержащими выбросы.