绘制开始-结束时隙-Matplotlib Python

Ref*_*etz 1 python plot matplotlib slots

我正在尝试绘制时隙。我有两个“开始”“结束”点的想法。我想把它当成小块放在图上。请记住,这些块不是连续的,而这正是我在寻找的差距。到目前为止,我尝试使用补丁:

for x_1 , x_2 in zip(s_data['begin'].values ,s_data['end'].values):
ax1.add_patch(Rectangle((x_1,0),x_2-x_1,0.5)) 
plt.show()
Run Code Online (Sandbox Code Playgroud)

但这只是让我停下了蓝色的身影。

虽然我想要这样的东西

在此处输入图片说明

Imp*_*est 6

该方法是正确的。您只需要缩放轴以使整个图在其范围内即可。

import matplotlib.pyplot as plt
import pandas as pd

df = pd.DataFrame({"begin": [1,4,6,9], "end" : [3,5,8,12]})

fig, ax = plt.subplots()

for x_1 , x_2 in zip(df['begin'].values ,df['end'].values):
    ax.add_patch(plt.Rectangle((x_1,0),x_2-x_1,0.5))

ax.autoscale()
ax.set_ylim(-2,2)
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

值得注意的是matplotlib具有function broken_barh,它简化了此类图表的创建。

import matplotlib.pyplot as plt
import pandas as pd

df = pd.DataFrame({"begin": [1,4,6,9], "end" : [3,5,8,12]})

fig, ax = plt.subplots()

ax.broken_barh(list(zip(df["begin"].values, (df["end"] - df["begin"]).values)), (0, 0.5))

ax.set_ylim(-2,2)
plt.show()
Run Code Online (Sandbox Code Playgroud)

提供与上述相同的图表。