我有这个情节:
data = {'User 1': [1,2,3], 'User 2': [5, 8, 10], 'User 3': [80, 75, 100], 'User 4': [65, 80, 45]}
characteristics = [('commits', 'r'), ('intended h', 'g'), ('actual h', 'b')]
n_bars = (len(characteristics)+1)*len(data)
fig = plt.figure(figsize=(5,5))
ax = fig.add_axes([0.15, 0.15, 0.65, 0.7])
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.set_yticklabels(data.keys())
ax.set_yticks(np.arange(len(characteristics)/2, n_bars, len(data)))
pers_id = 0
bar_id = 0
for name, data in data.iteritems():
for char_id, characteristic in enumerate(characteristics):
ax.barh(bar_id, data[char_id], facecolor=characteristic[1])
bar_id = bar_id + 1
ax.barh(bar_id, 100, facecolor='white', linewidth=0)
bar_id += 1
pers_id += 1
plt.savefig('perf.png')
plt.show()
我仍然需要的唯一重要功能是在右上方添加一个图例,标注位于characteristics[i][0]
,颜色来自characteristics[i][0]
。
我如何才能使这个工作?
答案 0 :(得分:2)
pandas有一些数据结构和方法来处理和绘制这些数据:
In [89]: import pandas as pd
In [90]: df = pd.DataFrame(data).T
In [91]: df.columns = [c[0] for c in characteristics]
In [92]: df
Out[92]:
commits intended h actual h
User 1 1 2 3
User 2 5 8 10
User 3 80 75 100
User 4 65 80 45
In [93]: colors = [c[1] for c in characteristics]
In [94]: df.sort_index(ascending=False).plot(kind='barh', color=colors)
答案 1 :(得分:1)
import matplotlib.pyplot as plt
import numpy as np
import collections
data = {'User 1': [1,2,3], 'User 2': [5, 8, 10], 'User 3': [80, 75, 100],
'User 4': [65, 80, 45]}
characteristics = [('commits', 'r'), ('intended h', 'g'), ('actual h', 'b')]
n_bars = (len(characteristics)+1)*len(data)
fig = plt.figure(figsize=(5,5))
ax = fig.add_axes([0.15, 0.15, 0.65, 0.7])
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.set_yticklabels(data.keys())
ax.set_yticks(np.arange(len(characteristics)/2, n_bars, len(data)))
pers_id = 0
bar_id = 0
artists = collections.deque(maxlen = len(characteristics))
labels = collections.deque(maxlen = len(characteristics))
for name, data in data.iteritems():
for char_id, characteristic in enumerate(characteristics):
artist, = ax.barh(bar_id, data[char_id], facecolor=characteristic[1])
artists.append(artist)
labels.append(characteristic[0])
bar_id = bar_id + 1
ax.barh(bar_id, 100, facecolor='white', linewidth=0)
bar_id += 1
pers_id += 1
plt.legend(artists, labels, loc = 'best')
# plt.savefig('perf.png')
plt.show()
的产率