matplotlib를 사용하여 막대 차트 형태로 데이터를 그릴 때 서로 다른 데이터 그룹을 구별하는 것이 바람직한 경우가 많습니다. 데이터 구조는 다음과 유사할 수 있습니다.
data = {'Room A': {'Shelf 1': {'Milk': 10, 'Water': 20}, 'Shelf 2': {'Sugar': 5, 'Honey': 6} }, 'Room B': {'Shelf 1': {'Wheat': 4, 'Corn': 7}, 'Shelf 2': {'Chicken': 2, 'Cow': 1} } }
이미지로 표시되는 원하는 출력은 다음과 같습니다.
[레이블이 지정된 그룹이 있는 막대 차트를 보여주는 이미지]
matplotlib에 그룹 라벨을 추가하기 위한 내장 솔루션이 없으므로 사용자 정의 구현이 가능합니다. 고안:
#!/usr/bin/env python from matplotlib import pyplot as plt def mk_groups(data): try: newdata = data.items() except: return thisgroup = [] groups = [] for key, value in newdata: newgroups = mk_groups(value) if newgroups is None: thisgroup.append((key, value)) else: thisgroup.append((key, len(newgroups[-1]))) if groups: groups = [g + n for n, g in zip(newgroups, groups)] else: groups = newgroups return [thisgroup] + groups def add_line(ax, xpos, ypos): line = plt.Line2D([xpos, xpos], [ypos + .1, ypos], transform=ax.transAxes, color='black') line.set_clip_on(False) ax.add_line(line) def label_group_bar(ax, data): groups = mk_groups(data) xy = groups.pop() x, y = zip(*xy) ly = len(y) xticks = range(1, ly + 1) ax.bar(xticks, y, align='center') ax.set_xticks(xticks) ax.set_xticklabels(x) ax.set_xlim(.5, ly + .5) ax.yaxis.grid(True) scale = 1. / ly for pos in xrange(ly + 1): # change xrange to range for python3 add_line(ax, pos * scale, -.1) ypos = -.2 while groups: group = groups.pop() pos = 0 for label, rpos in group: lxpos = (pos + .5 * rpos) * scale ax.text(lxpos, ypos, label, ha='center', transform=ax.transAxes) add_line(ax, pos * scale, ypos) pos += rpos add_line(ax, pos * scale, ypos) ypos -= .1 if __name__ == '__main__': data = {'Room A': {'Shelf 1': {'Milk': 10, 'Water': 20}, 'Shelf 2': {'Sugar': 5, 'Honey': 6} }, 'Room B': {'Shelf 1': {'Wheat': 4, 'Corn': 7}, 'Shelf 2': {'Chicken': 2, 'Cow': 1} } } fig = plt.figure() ax = fig.add_subplot(1,1,1) label_group_bar(ax, data) fig.subplots_adjust(bottom=0.3) fig.savefig('label_group_bar_example.png')
mk_groups 함수는 데이터를 차트 생성에 적합한 형식으로 변환합니다. add_line은 지정된 위치의 서브플롯에 수직선을 추가하는 역할을 합니다. label_group_bar 함수는 아래에 그룹 레이블이 있는 막대 차트를 생성합니다.
이 구현의 결과는 레이블이 명확하게 지정된 그룹이 있는 막대 차트입니다.
[레이블이 지정된 그룹이 있는 막대 차트를 보여주는 이미지]
위 내용은 Matplotlib 막대 차트에 그룹 레이블을 추가하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!