我有以下数据框:
data = pd.DataFrame(data={'group': ['A', 'B', 'C'],
'start': [2, 5, 9], 'end': [9, 8, 6]})
我很想创建以下图形,我到处搜索过 找不到答案:
图
我在matplotlib网站,熊猫上到处都看过, 我找不到执行它的简单方法。
答案 0 :(得分:2)
您可以使用matplotlib barh
绘制水平条。
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()
答案 1 :(得分:1)
您可以使用Rectangle
中的matplotlib.patches
类
see here
这应该使您入门:
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])