[英]Matplotlib horizontal bar graph with x-axis label along y-axis
我一直按照以下代碼片段使用Pyasciigraph模塊
thresholds = {
int(mean): Gre, int(mean * 2): Yel, int(mean * 3): Red,
}
data = hcolor(chart, thresholds)
graph = Pyasciigraph(
separator_length=4,
multivalue=False,
human_readable='si',
)
for line in graph.graph(title, data):
print(line)
print("")
繪制水平條形圖,如下所示(y軸標簽在下面的屏幕快照中不可見):
現在,我試圖使用matplotlib對相同的數據進行繪制,而我的示例代碼是:
import collections
import matplotlib.pyplot as plt
D = [(u'00:00', 1), (u'01:00', 1), (u'02:00', 0), (u'03:00', 0), (u'04:00', 0), (u'05:00', 0), (u'06:00', 1), (u'07:00', 7), (u'08:00', 3), (u'09:00', 2), (u'10:00', 6), (u'11:00', 2), (u'12:00', 4), (u'13:00', 4), (u'14:00', 1), (u'15:00', 6), (u'16:00', 3), (u'17:00', 2), (u'18:00', 1), (u'19:00', 1), (u'20:00', 0), (u'21:00', 2), (u'22:00', 2), (u'23:00', 1)]
D2 = dict(D)
od2 = collections.OrderedDict(sorted(D2.items(), reverse=True))
plt.barh(range(len(od2)), od2.values(), align='center')
plt.yticks(range(len(od2)), od2.keys())
plt.gca().axes.get_xaxis().set_ticks([])
plt.show()
與使用Pyasciigraph繪制的圖相比,此圖中我缺少的是:
與我的相關的stackoverflow的最接近答案是this ,但沒有幫助。
任何建議,技巧,幫助將不勝感激。
為了在圖的右側顯示條形值 ,您可以使用雙軸並將其標簽設置為字典中的值。
為了產生閾值條形圖,可以將多個條形圖相互疊加繪制,每次將值截斷到閾值時。
import collections
import matplotlib.pyplot as plt
D = [(u'00:00', 1), (u'01:00', 1), (u'02:00', 0), (u'03:00', 0), (u'04:00', 0),
(u'05:00', 0), (u'06:00', 1), (u'07:00', 7), (u'08:00', 3), (u'09:00', 2),
(u'10:00', 6), (u'11:00', 2), (u'12:00', 4), (u'13:00', 4), (u'14:00', 1),
(u'15:00', 6), (u'16:00', 3), (u'17:00', 2), (u'18:00', 1), (u'19:00', 1),
(u'20:00', 0), (u'21:00', 2), (u'22:00', 2), (u'23:00', 1)]
D2 = dict(D)
od = collections.OrderedDict(sorted(D2.items(), reverse=True))
fig, ax = plt.subplots()
ax.barh(range(len(od)), od.values(), align='center')
thr = lambda l, t: [v if (v <= t) else t for v in l ]
ax.barh(range(len(od)), thr(od.values(),4), align='center')
ax.barh(range(len(od)), thr(od.values(),2), align='center')
ax.set_yticks(range(len(od)))
ax.set_yticklabels(od.keys())
ax.set_xticks([])
ax2 = ax.twinx()
ax2.set_ylim(ax.get_ylim())
ax2.set_yticks(range(len(od)))
ax2.set_yticklabels(od.values())
plt.show()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.