Skip to main content
 首页 » 编程设计

python之绘制开始结束时隙之matplotlib python

2025年05月04日15think

我正在尝试绘制时间段。我有两个 ndarrays 的“开始”和“结束”点。 我想把它画成图形上的 block 。请记住, block 不是连续的,并且插槽之间存在间隙。

到目前为止,我一直在尝试使用补丁:

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() 

但它只给我半个蓝色的数字。

虽然我想要这样的东西

请您参考如下方法:

方法是正确的。您只需要缩放轴,使完整的图在其范围内。

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() 

值得注意的是matplotlib有一个函数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() 

给出与上面相同的图表。