Невозможно установить стиль линии позвоночника с помощью matplotlib

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

no dotted spines

Моя цель - представить один участок, разрезанный на две части, чтобы показать выбросы сверху. Я хотел бы установить соответствующие нижние / верхние шипы пунктирными, чтобы они четко показывали, что есть разрыв.

import numpy as np
import matplotlib.pyplot as plt

# Break ratio of the bottom/top plots respectively
ybreaks = [.25, .9]

figure, (ax1, ax2) = plt.subplots(
    nrows=2, ncols=1,
    sharex=True, figsize=(22, 10),
    gridspec_kw = {'height_ratios':[1 - ybreaks[1], ybreaks[0]]}
)

d = np.random.random(100)

ax1.plot(d)
ax2.plot(d)

# Set the y axis limits
ori_ylim = ax1.get_ylim()
ax1.set_ylim(ori_ylim[1] * ybreaks[1], ori_ylim[1])
ax2.set_ylim(ori_ylim[0], ori_ylim[1] * ybreaks[0]) 

# Spine formatting
# ax1.spines['bottom'].set_visible(False)  # This works
ax1.spines['bottom'].set_linewidth(.25)  # This works
ax1.spines['bottom'].set_linestyle('dashed')  # This does not work

ax2.spines['top'].set_linestyle('-')  # Does not work
ax2.spines['top'].set_linewidth(.25)  # Works

plt.subplots_adjust(hspace=0.05)

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

Что мне не хватает?

1 ответ

Решение

Во-первых, следует отметить, что если вы не измените ширину линии, пунктирный стиль будет выглядеть хорошо.

ax1.spines['bottom'].set_linestyle("dashed")

Однако расстояние может быть слишком узким. Таким образом, можно разделить тире дальше. Например

ax1.spines['bottom'].set_linestyle((0,(4,4)))

Теперь, если вы также установите ширину линии на что-то меньшее, вам потребуется пропорционально больший интервал. Например

ax1.spines['bottom'].set_linewidth(.2)  
ax1.spines['bottom'].set_linestyle((0,(16,16))) 

Обратите внимание, что линия фактически не становится более тонкой на экране из-за использования сглаживания. Он просто смывается, так что становится светлее. Таким образом, в целом может иметь смысл сохранить ширину линии примерно в 0,72 точки (0,72 точки = 1 пиксель при 100 dpi) и вместо этого изменить цвет на светло-серый.

Другие вопросы по тегам