Python matplotlib-为y轴上的每组创建x轴上的条形图

Python matplotlib-为y轴上的每组创建x轴上的条形图,python,pandas,matplotlib,Python,Pandas,Matplotlib,我有以下数据框: data = pd.DataFrame(data={'group': ['A', 'B', 'C'], 'start': [2, 5, 9], 'end': [9, 8, 6]}) 我想创建下面的图表,我到处都搜索过了 找不到答案: 图表 我在matplotlib网站上到处找过熊猫, 我找不到一个简单的方法来执行它。您可以使用matplotlib.patches 这应该让你开始: import matplotlib.pyplot as plt from matplo

我有以下数据框:

  data = pd.DataFrame(data={'group': ['A', 'B', 'C'],
 'start': [2, 5, 9], 'end': [9, 8, 6]})
我想创建下面的图表,我到处都搜索过了 找不到答案:

图表

我在matplotlib网站上到处找过熊猫,
我找不到一个简单的方法来执行它。

您可以使用
matplotlib.patches

这应该让你开始:

import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle
import numpy as np

N_GROUPS = len(data)
HEIGHT = 1
rectangles = []

yticks = np.linspace(HEIGHT, N_GROUPS * HEIGHT * 2, N_GROUPS)
colors = ['g', 'r', 'b'] * (N_GROUPS // 3)

for (_, row), y, c in zip(data.iterrows(), yticks, colors):
    rec = {'xy': (row.start, y - HEIGHT/2),
           'width': row.end - row.start,
           'height': 1,
           'fill': False,
           'color': c
           }
    rectangles.append(rec)

for rec in rectangles:
    ax = plt.gca()
    p = Rectangle(**rec)
    ax.add_patch(p)

plt.yticks(yticks, data['group'])
plt.xlim([data['start'].min() - 1, data['end'].max() + 1])
plt.ylim([0, (N_GROUPS * HEIGHT * 2) + HEIGHT])

您可以使用matplotlib绘制水平条

import pandas as pd
import matplotlib.pyplot as plt

data = pd.DataFrame(data={'group': ['A', 'B', 'C'],
                              'start': [2, 5, 6], 'end': [9, 8, 9]})

plt.barh(data["group"], data["end"]-data["start"], 0.4, data["start"], 
         color="None", edgecolor=["blue", "red", "green"])
plt.xlim(0,10)
plt.show()

首先,感谢你们两位!如果数据帧而不是数字有时间,你会怎么做?我试着用x轴表示小时,而不仅仅是随机数。这肯定取决于数据帧中存储时间的格式。但是这里展示的基本方法应该是一样的。