首页 > 编程知识 正文

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

时间:2023-05-03 21:17:16 阅读:275809 作者:4842

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

话不多说上代码   """水平堆积图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, 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)

 

效果如图 

                      

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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。