欢迎光临
我们一直在努力

帮助乳酸堆积水平,水平投影

因为大部分是竖型堆积图,最重要的是没数值标签,特意牺牲了与左手独处的时间写下了这个例子

话不多说上代码 ? “””水平堆积图2019-6-11 11:02:27@author huangzheng”””import tempfileimport matplotlib.pyplot as pltimport numpy as npfrom sss.util import remove_edgedef get_rating_chart(labels, data): plt.rcParams[‘font.sans-serif’] = [‘SimHei’] # 用来正常显示中文标签 plt.rcParams[‘axes.unicode_minus’] = False # 用来正常显示负号 # 去除坐标轴线 remove_edge(plt) y1 = [] y2 = [] y3 = [] y4 = [] y5 = [] for i in data: y1.append(i[1]) y2.append(i[2]) y3.append(i[3]) y4.append(i[4]) y5.append(i[5]) y1 = np.array(y1) y2 = np.array(y2) y3 = np.array(y3) y4 = np.array(y4) y5 = np.array(y5) # 堆积柱状图 height = 0.4 plt.barh(labels, y1, color=’#4472C4′, label=’1-50名’, height=height) plt.barh(labels, y2, color=’#ED7D31′, label=’51-100名’, height=height, left=y1) plt.barh(labels, y3, color=’#A5A5A5′, label=’101-150名’, height=height, left=y1 + y2) plt.barh(labels, y4, color=’#FFC000′, label=’151-200名’, height=height, left=y1 + y2 + y3) plt.barh(labels, vps云服务器 y5, color=’#5B9BD5′, label=’201-500名’, height=height, left=y1 + y2 + y3 + y4) # 显示范围 plt.ylim(-1, len(labels)) plt.xlim(-1, max(y1) * 10) # 标题 plt.title(‘前500名分段-各校发布’) # 旋转X轴标签 # pl.xticks(rotation=80) # 添加图例 plt.legend(loc=’lower center’, ncol=5, frameon=False, fontsize=8) # 关闭横坐标 plt.xticks([]) # 为每个条形图添加数值标签 for x, y in enumerate(y1): if y != 0: plt.text(y / 2, x, ‘%.0f’ % y, ha=’center’, va=’center’, color=’#050505′) a = 0 for (i, j) in zip(y1, y2): z = i + j if j != 0: plt.text(z – j / 2, a, ‘%.0f’ % j, ha=’center’, va=’center’, color=’#050505′) a += 1 b = 0 for (i, j, k) in zip(y1, y2, y3): z = i + j + k if k != 0: plt.text(z – k / 2, b, ‘%.0f’ % k, ha=’center’, va=’center’, color=’#050505′) b += 1 c = 0 for (i, j, k, l) in zip(y1, y2, y3, y4): z = i + j + k + l if l != 0: plt.text(z – l / 2, c, ‘%.0f’ % l, ha=’center’, va=’center’, color=’#050505′) c += 1 d = 0 for (i, j, k, l, m) in zip(y1, y2, y3, y4, y5): z = i + j + k + l + m if m != 0: plt.text(z – m / 2, d, ‘%.0f’ % m, ha=’center’, va=’center’, color=’#050505′) d += 1 result = tempfile.mktemp(‘.jpg’, prefix=’bar-‘) plt.savefig(result, dpi=300, format=”jpg”, bbox_inches=”tight”) # 不要限定图片格式 plt.show() return resultif __name__ == ‘__main__’: data = [[‘株洲市第二中学’, 23, 22, 24, 18, 133], [‘攸县第一中学’, 14, 19, 8, 14, 62], [‘浏阳市一中’, 9, 6, 12, 14, 57], [‘醴陵市第一中学’, 4, 3, 6, 4, 48], [‘株洲市第八中学’, 0, 0, 0, 0, 7]] # 数值由小到大排列,为了好看 data.reverse() labels = [‘株洲市第二中学’, ‘攸县第一中学’, ‘浏阳市一中’, ‘醴陵市第一中学’, ‘株洲市第八中学’] labels.reverse() get_rating_chart(labels, data)

?

效果如图?

? ? ? ? ? ? ? ? ? ? ??

看官觉得好的话记得评论:棒棒棒 (老实的咖啡豆)??

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。