Невозможно установить стиль линии позвоночника с помощью matplotlib
Я пытаюсь установить стиль линии колючек сюжета matplotlib, но по какой-то причине это не работает. Я могу сделать их невидимыми или сделать их тоньше, но я не могу изменить стиль линии.
Моя цель - представить один участок, разрезанный на две части, чтобы показать выбросы сверху. Я хотел бы установить соответствующие нижние / верхние шипы пунктирными, чтобы они четко показывали, что есть разрыв.
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) и вместо этого изменить цвет на светло-серый.