matplotlib手册(5) - 柱状图

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matplotlib手册(5) - 柱状图相关的知识,希望对你有一定的参考价值。

参考技术A 这里主要整理下matplotlib中绘制柱状图的方法,参考了几篇文章:
matplotlib绘图——柱状图
官网介绍
感谢上面的分享,博客写的很好很全,帮助很大,下面我们开始。
我们要绘制柱形图,要使用pyplot的bar方法

做了一些练习之后,发现通过left、height、width、bottom这几个参数可以实现很多不同的图表,后面我们会说到。
因为是柱形图,所以四个点的坐标很重要,我们初始化,必须指定的是left和height,width默认是0.8,bottom默认是None,就是0
下面,开始我们的小例子

上面就是一个简单的柱状图,我们来分析一下,这个图

我们传入的参数是left=[10,11],height=[10,15],以第一个柱状图为例,他四个点的坐标为:图展示的时候,默认是居中的
左下(left-width/2,bottom),右下(left+width/2,bottom),左上(left-width/2,bottom+height),右上(left+width/2,bottom+height)
即(9.6,0),(10.4,0),(9.6,10),(10.4,10),
理解这个位置很重要,后面会用的到。
下面,我们就修改下参数,加深下这个位置的理解

我们可以修改对齐方式

我们看看width和bottom的参数介绍,他们都可以是一个常量,或数组的,什么意思呢?就是说,我们可以给不同的柱状图设置不同的宽度和y轴起始高度

像这样:

好了,下面,我们就开始看看一些常用的参数

那个color也可以设置填充颜色和边框颜色,但是他比较好玩儿,他可以接受一个颜色数组,让不同的柱状图颜色不一样

这个hatch是可以组合的

下面还有一个参数,我们平时使用时,x轴可能并不是数字,而是文字,这个也是可以的,

这个中文标签,暂时还不行,会显示乱码,这个bar貌似没有字体参数,等我研究下,再回来分享。
好辣,中文是可以处理的,加上参数就行了,详情参考: matplotlib手册(4)-中文乱码 中最下面的更新的方法

就是根据坐标,将2个柱状图上下放置即可,就是灵活运用left、bottom、width、height参数
import matplotlib.pyplot as pltplt.bar([10,12,14],[10,15,20],facecolor='green',tick_label=['one','two','three'],label='green')#横坐标一样就行了,plt.bar([10,12,14],[5,30,10],bottom=[10,15,20],facecolor='orange',label='orange')plt.legend()plt.show()

就是同时显示过个柱状图,同样是利用坐标,计算好位置就行了,将右边的left加上一个width就行了,

python 使用 matplotlib.pyplot来画柱状图和饼图

导入包

import matplotlib.pyplot as plt

柱状图

最简柱状图

# 显示高度
def autolabel(rects):
    for rect in rects:
        height = rect.get_height()
        plt.text(rect.get_x()+rect.get_width()/2.- 0.2, 1.03*height, \'%s\' % int(height))


name_list = [\'A\', \'B\', \'C\', \'D\', \'E\', \'F\', \'G\', \'H\']
num_list = [33, 44, 53, 16, 11, 17, 17, 10]
autolabel(plt.bar(range(len(num_list)), num_list, color=\'rgb\', tick_label=name_list))
plt.show()

结果

堆叠柱状图

# 显示高度
def autolabel(rects1, rects2):
    i = 0
    for rect1 in rects1:
        rect2 = rects2[i]
        i += 1
        height = rect1.get_height() + rect2.get_height()
        plt.text(rect1.get_x()+rect1.get_width()/2. - 0.1, 1.03*height, \'%s\' % int(height))


name_list = [\'A\', \'B\', \'C\', \'D\']
num_list = [10, 15, 16, 28]
num_list2 = [10, 12, 18, 26]
z1 = plt.bar(range(len(num_list)), num_list, label=\'1\', fc=\'b\')
z2 = plt.bar(range(len(num_list)), num_list2, bottom=num_list, label=\'2\', tick_label=name_list, fc=\'g\')
autolabel(z1, z2)
plt.legend()
plt.show()

结果

并列柱状图

name_list = [\'A\', \'B\', \'C\', \'D\']
num_list = [10, 15, 16, 28]
num_list2 = [10, 12, 18, 26]
x = list(range(len(num_list)))
total_width, n = 0.8, 2
width = total_width / n
plt.bar(x, num_list, width=width, label=\'1\', fc=\'b\')
for i in range(len(x)):
    x[i] += width
plt.bar(x, num_list2, width=width, label=\'2\', tick_label=name_list, fc=\'g\')
plt.legend()
plt.show()

结果

饼图

最简饼图

name_list = [\'A\', \'B\', \'C\', \'D\', \'E\', \'F\', \'G\', \'H\', \'I\', \'J\']
num_list = [33, 44, 53, 6,11, 7, 7, 10, 3, 1]
# 保证圆形
plt.axes(aspect=1)
plt.pie(x=num_list, labels=name_list, autopct=\'%3.1f %%\')
plt.show()

结果

带切割的饼图

name_list = [\'A\', \'B\', \'C\', \'D\']
num_list = [10, 3, 3, 47]
colors = [\'green\', \'yellow\', \'blue\', \'red\']
# 圆形
plt.figure(1, figsize=(6, 6))
#决定分割部分,及其与其它部分之间的间距
expl = [0, 0, 0, 0.1]
plt.pie(x=num_list, explode=expl, labels=name_list, autopct=\'%3.1f %%\', colors=colors, shadow=True)
plt.show()

结果

以上是关于matplotlib手册(5) - 柱状图的主要内容,如果未能解决你的问题,请参考以下文章

matplotlib 中的柱状图

python matplotlib 堆叠柱状图 visualization

python matplotlib 堆叠柱状图 visualization

python matplotlib 堆叠柱状图 visualization

Matplotlib_2

100天精通Python(可视化篇)——第80天:matplotlib绘制不同种类炫酷柱状图代码实战(簇状堆积横向百分比3D柱状图)