bar(left, height, width=0.8, bottom=None, **kwargs)

# left为x轴的位置序列,一般采用arange函数产生一个序列;
# height为y轴的数值序列,也就是柱形图的高度,一般就是我们需要展示的数据;
# width为柱形图的宽度,一般这是为1即可;color为柱形图填充的颜色;
# align设置plt.xticks()函数中的标签的位置;
# yerr让柱形图的顶端空出一部分。
# color设置柱状的颜色
# alpha 设置柱状填充颜色的透明度 大于0 小于等于1
# linewidth 线条的宽度
#bottom bottom决定了柱子距离x轴的高度,默认为None,即表示与x轴距离为0

atplotlib.pyplot.bar(left, height, width=0.8, bottom=None, hold=None, data=None, **kwargs)

python给hist柱子添加颜色 matplotlib柱状图颜色填充_并列柱状图

基本用法

import pandas as pd
import matplotlib.pyplot as plt
 
#读取数据
datafile = u'D:\\pythondata\\learn\\matplotlib.xlsx'
data = pd.read_excel(datafile)
 
plt.figure(figsize=(10,5))#设置画布的尺寸
plt.title('Examples of Histogram',fontsize=20)#标题,并设定字号大小
plt.xlabel(u'x-year',fontsize=14)#设置x轴,并设定字号大小
plt.ylabel(u'y-income',fontsize=14)#设置y轴,并设定字号大小
 
#alpha:透明度;width:柱子的宽度;facecolor:柱子填充色;edgecolor:柱子轮廓色;lw:柱子轮廓的宽度;label:图例;
plt.bar(data['时间'],data['收入_Jay'], alpha=0.6,width = 0.8,  facecolor = 'deeppink', edgecolor = 'darkblue', lw=1, label='Jay income')
 
plt.legend(loc=2)#图例展示位置,数字代表第几象限
plt.show()#显示图像

python给hist柱子添加颜色 matplotlib柱状图颜色填充_并列柱状图_02

多个直方图并列显示

通过bar() 中的 width 参数来调节:

import pandas as pd
import matplotlib.pyplot as plt
 
#读取数据
datafile = u'D:\\pythondata\\learn\\matplotlib.xlsx'
data = pd.read_excel(datafile)
 
plt.figure(figsize=(10,5))#设置画布的尺寸
plt.title('Examples of Histogram',fontsize=20)#标题,并设定字号大小
plt.xlabel(u'x-year',fontsize=14)#设置x轴,并设定字号大小
plt.ylabel(u'y-income',fontsize=14)#设置y轴,并设定字号大小
 
width_val = 0.4 #若显示 n 个柱状图,则width_val的值需小于1/n ,否则柱形图会有重合
 
#alpha:透明度;width:柱子的宽度;facecolor:柱子填充色;edgecolor:柱子轮廓色;lw:柱子轮廓的宽度;label:图例;
plt.bar(data['时间'],data['收入_Jay'], alpha=0.6,width = width_val,  facecolor = 'deeppink', edgecolor = 'deeppink', lw=1, label='Jay income')
plt.bar(data['时间']+width_val,data['收入_JJ'], alpha=0.6,width = width_val,  facecolor = 'darkblue', edgecolor = 'darkblue', lw=1, label='JJ income')
 
plt.legend(loc=2)#图例展示位置,数字代表第几象限
plt.show()#显示图像

python给hist柱子添加颜色 matplotlib柱状图颜色填充_柱状图_03

显示直方图上的数值

import pandas as pd
import matplotlib.pyplot as plt
 
#读取数据
datafile = u'D:\\pythondata\\learn\\matplotlib.xlsx'
data = pd.read_excel(datafile)
 
plt.figure(figsize=(10,5))#设置画布的尺寸
plt.title('Examples of Histogram',fontsize=20)#标题,并设定字号大小
plt.xlabel(u'x-year',fontsize=14)#设置x轴,并设定字号大小
plt.ylabel(u'y-income',fontsize=14)#设置y轴,并设定字号大小
 
width_val = 0.4 #若显示 n 个柱状图,则width_val的值需小于1/n ,否则柱形图会有重合
#alpha:透明度;width:柱子的宽度;facecolor:柱子填充色;edgecolor:柱子轮廓色;lw:柱子轮廓的宽度;label:图例;
rects_Jay = plt.bar(data['时间'],data['收入_Jay'], alpha=0.6,width = width_val, facecolor = 'deeppink', label='Jay income')
rects_JJ = plt.bar(data['时间']+width_val,data['收入_JJ'], alpha=0.6,width = width_val, facecolor = 'darkblue',label='JJ income')
 
# 添加数据标签 就是矩形上面的数值
def add_labels(rects):
    for rect in rects:
        height = rect.get_height()
        plt.text(rect.get_x() + rect.get_width()/2, height, height, ha='center', va='bottom')
        rect.set_edgecolor('white')
 
add_labels(rects_Jay)
add_labels(rects_JJ)
 
plt.legend(loc=2)#图例展示位置,数字代表第几象限
plt.show()#显示图像

python给hist柱子添加颜色 matplotlib柱状图颜色填充_并列柱状图_04

多个直方图堆叠显示

通过bar() 中的 bottom 参数来调节:

import pandas as pd
import matplotlib.pyplot as plt
 
#读取数据
datafile = u'D:\\pythondata\\learn\\matplotlib.xlsx'
data = pd.read_excel(datafile)
 
plt.figure(figsize=(10,5))#设置画布的尺寸
plt.title('Examples of Histogram',fontsize=20)#标题,并设定字号大小
plt.xlabel(u'x-year',fontsize=14)#设置x轴,并设定字号大小
plt.ylabel(u'y-income',fontsize=14)#设置y轴,并设定字号大小
 
#通过bottom使得两个柱状图堆叠显示,且没有交叉
#alpha:透明度;width:柱子的宽度;facecolor:柱子填充色;edgecolor:柱子轮廓色;lw:柱子轮廓的宽度;label:图例;
plt.bar(data['时间'],data['收入_Jay'], alpha=0.6,width = width_val,  facecolor = 'deeppink', edgecolor = 'deeppink', lw=1, label='Jay income')
plt.bar(data['时间'],data['收入_JJ'], bottom=data['收入_Jay'], alpha=0.6,width = width_val,  facecolor = 'darkblue', edgecolor = 'darkblue', lw=1, label='JJ income')
 
plt.legend(loc=2)#图例展示位置,数字代表第几象限
plt.show()#显示图像

python给hist柱子添加颜色 matplotlib柱状图颜色填充_并列柱状图_05

水平直方图

通过 barh() 函数实现,与 bar() 函数的主要区别是:在 bar() 函数中,width 这一参数代表的是柱子的宽度(胖瘦),而在 barh() 函数中 width 这一参数代表的是横向柱子的长度(长短),在下面代码中,width = data[‘收入_Jay’]。

Matplotlib 中绘制水平柱状图(直方图、条形图)的函数为 barh() ,使用语法如下:
matplotlib.pyplot.barh(y, width, height=0.8, left=None, *, align=‘center’, **kwargs)

import pandas as pd
import matplotlib.pyplot as plt
 
#读取数据
datafile = u'D:\\pythondata\\learn\\matplotlib.xlsx'
data = pd.read_excel(datafile)
 
plt.figure(figsize=(10,5))#设置画布的尺寸
plt.title('Examples of Histogram',fontsize=20)#标题,并设定字号大小
plt.xlabel(u'x-year',fontsize=14)#设置x轴,并设定字号大小
plt.ylabel(u'y-income',fontsize=14)#设置y轴,并设定字号大小
 
#alpha:透明度;facecolor:柱子填充色;edgecolor:柱子轮廓色;lw:柱子轮廓的宽度;label:图例;
plt.barh(data['时间'],data['收入_Jay'], alpha=0.6, facecolor = 'deeppink', edgecolor = 'deeppink', label='Jay income')
 
plt.legend(loc=4)#图例展示位置,数字代表第几象限
plt.show()#显示图像

python给hist柱子添加颜色 matplotlib柱状图颜色填充_并列柱状图_06

import matplotlib.pyplot as plt
import numpy as np

n = 12
X = np.arange(n)
Y1 = (1 - X / float(n)) * np.random.uniform(0.5, 1.0, n)
Y2 = (1 - X / float(n)) * np.random.uniform(0.5, 1.0, n)

plt.bar(X, +Y1)
plt.bar(X, -Y2)

plt.xlim(-.5, n)

plt.ylim(-1.25, 1.25)
#隐藏坐标轴刻度数字
plt.xticks(())
plt.yticks(())
#移动坐标轴
# ax=plt.gca()
# ax.spines['bottom'].set_position(('data',0))

plt.show()

python给hist柱子添加颜色 matplotlib柱状图颜色填充_python给hist柱子添加颜色_07

#加颜色和数据:
plt.bar(X, +Y1, facecolor='#9999ff', edgecolor='white')
plt.bar(X, -Y2, facecolor='#ff9999', edgecolor='white')

python给hist柱子添加颜色 matplotlib柱状图颜色填充_python给hist柱子添加颜色_08

添加数据标签

#添加数据标签
for x, y in zip(X, Y1):
    # ha: horizontal alignment
    # va: vertical alignment
    plt.text(x , y + 0.05, '%.2f' % y, ha='center', va='bottom')

for x, y in zip(X, Y2):
    # ha: horizontal alignment
    # va: vertical alignment
    plt.text(x , -y - 0.05, '%.2f' % y, ha='center', va='top')

python给hist柱子添加颜色 matplotlib柱状图颜色填充_并列柱状图_09

bar(left, height, width=0.8, bottom=None, **kwargs) 事实上,leftheightwidthbottom这四个参数确定了柱体的位置和大小。默认情况下,left为柱体的居中位置(可以通过align参数来改变left值的含义),即:

  • (left - width / 2, bottom)为左下角位置
  • (left + width / 2, bottom + height)为右上角位置
data = [5, 20, 15, 25, 10]
plt.bar([0.3, 1.7, 4, 6, 7], data, width=0.6, bottom=[10, 0, 5, 0, 5])
plt.show()

python给hist柱子添加颜色 matplotlib柱状图颜色填充_堆叠柱状图_10

设置柱体样式

颜色

通过facecolor(或fc)关键字参数可以设置柱体颜色

plt.bar(range(len(data)), data, fc='g')

通过 color 关键字参数 可以一次性设置多个颜色

plt.bar(range(len(data)), data, color='rgb') # or `color=['r', 'g', 'b']`

设置tick label

设置x轴刻度(tick_label)用labels = [‘Tom’, ‘Dick’, ‘Harry’, ‘Slim’, ‘Jim’]显示

import matplotlib.pyplot as plt

data = [5, 20, 15, 25, 10]
labels = ['Tom', 'Dick', 'Harry', 'Slim', 'Jim']

plt.bar(range(len(data)), data, tick_label=labels)
plt.show()

python给hist柱子添加颜色 matplotlib柱状图颜色填充_并列柱状图_11

堆叠柱状图

通过 bottom参数,可以绘制堆叠柱状图。

size = 5
x = np.arange(size)
a = np.random.random(size)
b = np.random.random(size)
#自定义label
labels = ['Tom', 'Dick', 'Harry', 'Slim', 'Jim']
plt.bar(x, a, label='a',tick_label=labels)
plt.bar(x, b, bottom=a, label='b')
plt.legend()
plt.show()

python给hist柱子添加颜色 matplotlib柱状图颜色填充_python给hist柱子添加颜色_12

并列柱状图

绘制并列柱状图与堆叠柱状图类似,都是绘制多组柱体,只需要控制好每组柱体的位置和大小即可。

size=5
x=np.arange(size)
a=np.random.random(size)
b=np.random.random(size)
c=np.random.random(size)

total_width,n=0.8,3
width=total_width/n
x=x-(total_width-width)/2

plt.bar(x,a,width=width,label='a')
plt.bar(x+width,b,width=width,label='b')
plt.bar(x+2*width,c,width=width,label='c')

plt.legend()
plt.show()

python给hist柱子添加颜色 matplotlib柱状图颜色填充_并列柱状图_13

条形图

使用barh 方法绘制条形图

import matplotlib.pyplot as plt

data = [5, 20, 15, 25, 10]

plt.barh(range(len(data)), data)
plt.show()

python给hist柱子添加颜色 matplotlib柱状图颜色填充_图例_14

plt.barh 方法的签名为:
barh(bottom, width, height=0.8, left=None, **kwargs)
可以看到与 plt.bar 方法类似。因此堆积条形图和并列条形图的画法与前面类似,