无法使用matplotlib设置书脊线样式

时间:2019-02-15 20:47:22

标签: python matplotlib linestyle

我尝试设置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 个答案:

答案 0 :(得分:2)

第一个应该提到的是,如果不更改线宽,则虚线样式会很好。

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

enter image description here

但是间距可能太紧。这是由于默认情况下将刺的capstyle设置为"projecting"

因此,人们可以将capstyle设置为"butt"(这也是绘图中法线的默认值),

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

enter image description here

或者,可以将破折​​号进一步分开。例如

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

enter image description here

现在,如果您还将线宽设置为较小,那么您将需要成比例地增加间距。例如

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

enter image description here

请注意,由于使用了抗锯齿功能,因此该线实际上在屏幕上并不会变细。它只是被洗掉,因此颜色变浅。因此总的来说,将线宽保持在0.72点(100dpi时为0.72点= 1像素)可能有意义,而将颜色改为浅灰色。