matplotlib绘图优化–显示bar chart的个数

  • A+
所属分类:python数据分析
摘要这一部分主要介绍使用matplotlib绘制柱状图的时候,如何显示出具体的个数, 将每一类的个数都显示在图中的方式.

文章目录(Table of Contents)

简介

这一部分介绍一下使用matplotlib绘制柱状图(bar)的时候, 显示每个柱状上面的个数是多少。方便进行更加详细的展示。

参考资料

下面代码主要根据官方的资料修改而来,参考链接如下:

Percentiles as horizontal bar chart

代码实践

直接贴一下代码,添加文字的部分是在for循环那里开始的,具体可以看一下实现的流程.

  1. x_name = ['neptune', 'smurf', 'back', 'teardrop', 'pod', 'land'] # 柱状图横坐标的名字
  2. x_value = [41214,  2646,   956,   892,   201,    18] # 柱状图的值
  3. x = np.arange(len(x_name))*2
  4. fig, ax1 = plt.subplots()
  5. fig.set_size_inches(10, 6)
  6. # 绘制多个bar在同一个图中, 这里需要控制width
  7. rects = plt.barh(x, x_value, color='#1b71f1', align='center')
  8. # 设置坐标轴的标签
  9. ax1.xaxis.set_tick_params(labelsize=15) # 设置y轴的字体的大小
  10. ax1.set_yticks(x) # 设置xticks出现的位置
  11. ax1.set_yticklabels(x_name, fontsize = 'x-large') # 设置xticks的值
  12. # 设置坐标轴的范围
  13. # ax1.set_ylim(0,15000) # 设置x轴的范围
  14. # 设置坐标轴名称
  15. ax1.set_xlabel("Count", fontsize='xx-large')
  16. ax1.set_ylabel("DoS Types", fontsize='xx-large')
  17. # 设置标题
  18. ax1.set_title('The Distribution of Different Types of DoS Data', fontsize='x-large')
  19. # --------------------
  20. # 下面开始添加文字说明
  21. # --------------------
  22. rect_labels = []
  23. # Lastly, write in the ranking inside each bar to aid in interpretation
  24. for rect in rects:
  25.     # Rectangle widths are already integer-valued but are floating
  26.     # type, so it helps to remove the trailing decimal point and 0 by
  27.     # converting width to int type
  28.     width = int(rect.get_width())
  29.     rankStr = width
  30.     # The bars aren't wide enough to print the ranking inside
  31.     if width < 4000: # 这个值用来判断count的值出现在左侧还是右侧
  32.         # Shift the text to the right side of the right edge
  33.         xloc = 5
  34.         # Black against white background
  35.         clr = 'black'
  36.         align = 'left'
  37.     else:
  38.         # Shift the text to the left side of the right edge
  39.         xloc = -1
  40.         # White on magenta
  41.         clr = 'white'
  42.         align = 'right'
  43.     # Center the text vertically in the bar
  44.     yloc = rect.get_y() + rect.get_height() / 2
  45.     label = ax1.annotate(rankStr, xy=(width, yloc), xytext=(xloc, 0),
  46.                         textcoords="offset points",
  47.                         ha=align, va='center',
  48.                         color=clr, weight='bold', clip_on=True)
  49.     rect_labels.append(label)
  50. plt.show()

最终的实验效果如下所示:

matplotlib绘图优化--显示bar chart的个数
  • 微信公众号
  • 关注微信公众号
  • weinxin
  • QQ群
  • 我们的QQ群号
  • weinxin
王 茂南

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: