堆叠柱状图
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
基本用法
import pandas as pd
import matplotlib.pyplot as plt
#读取数据
datafile = u'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()#显示图像
多个直方图并列显示
通过bar() 中的 width 参数来调节
绘制并列柱状图与堆叠柱状图类似,都是绘制多组柱体,只需要控制好每组柱体的位置和大小即可。
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()
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')
显示直方图上的数值
import pandas as pd
import matplotlib.pyplot as plt
#读取数据
datafile = u'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()#显示图像
直方图堆叠显示
通过bar() 中的 bottom 参数来调节
import pandas as pd
import matplotlib.pyplot as plt
#读取数据
datafile = u'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
#通过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()#显示图像
水平直方图
通过 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'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()#显示图像
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()
设置柱体样式
颜色
通过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()