import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
1.直方图hist()
data = list([2,3,5,3,3,5,6,7,9,0,8,9,3,8,9,2,1,2,4,1,6])
plt.hist(data,bins=5) # bins=5 将数据分到5个面元中
2.条形图bar()
plt.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)
2.1画条形图并添加误差线
attr = ['A','B','C','D']
value = [1,2,3,4]
std = [0.3,0.2,0.5,1]
plt.bar(attr,value,yerr=std,error_kw={'ecolor':'r','capsize':6},alpha=0.7,label='test')
plt.legend(loc=2)
plt.title('bar_chart')
2.2水平条形图
plt.barh(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)
x,y轴互换(添加残差线时应为xerr),其余和垂直条形图barh()相似
attr = ['A','B','C','D']
value = [1,2,3,4]
std = [0.3,0.2,0.5,1]
plt.barh(attr,value,xerr=std,error_kw={'ecolor':'r','capsize':6},alpha=0.7,label='test')
plt.legend(loc=5)
plt.title('hor_bar_chart')
2.3多序列条形图
attr = ['A','B','C','D']
std = [0.3,0.2,0.5,1]
value1 = [1,2,3,4]
value2 = [2,5,3,1]
value3 = [5,2,6,3]
bw = 0.3
x = np.arange(4)
plt.bar(x,value1,bw,yerr=std,error_kw={'ecolor':'r','capsize':6},alpha=0.7,label='test1')
plt.bar(x+bw,value2,bw,yerr=std,error_kw={'ecolor':'r','capsize':6},alpha=0.7,label='test2')
plt.bar(x+2*bw,value3,bw,yerr=std,error_kw={'ecolor':'r','capsize':6},alpha=0.7,label='test3')
plt.xticks(x+bw,attr)
plt.legend(loc=1)
plt.title('mul_bar_chart')
用pandas直接生成多序列条形图
attr = ['A','B','C','D']
data = {'test1':[1,2,3,4],
'test2':[2,5,3,1],
'test3':[5,2,6,3]}
x = [0,1,2,3]
std = [0.3,0.2,0.5,1]
df = pd.DataFrame(data)
df.plot(kind='bar',yerr=std,error_kw={'ecolor':'r','capsize':6},alpha=0.7)
plt.xticks(x,attr)
2.4多序列堆积条形图
(bottom关键字控制堆积;还可以用hatch关键字来区分不同类型)
x = np.arange(4)
attr = ['A','B','C','D']
value1 = np.array([1,2,3,4])
value2 = np.array([2,5,3,1])
value3 = np.array([5,2,6,3])
plt.bar(x,value1,color='b',hatch='x',alpha=0.6)
plt.bar(x,value2,color='r',bottom=value1,hatch='//',alpha=0.6)
plt.bar(x,value3,color='g',bottom=(value1+value2),alpha=0.6)
plt.title('mul_stack_bar_chart')
plt.xticks(x,attr)
用pandas直接生成多堆积条形图
(关键字stacked=True)
x = np.arange(4)
attr = ['A','B','C','D']
data = {'test1':[1,2,3,4],
'test2':[2,5,3,1],
'test3':[5,2,6,3]}
df = pd.DataFrame(data)
df.plot(kind='bar',stacked=True,alpha=0.7)
plt.xticks(x,attr)
2.5 x轴上下两侧的条形图
x0 = np.arange(4)
attr = ['A','B','C','D']
value1 = np.array([1,2,3,4])
value2 = np.array([2,5,3,1])
plt.bar(x0,value1,alpha=0.7)
plt.bar(x0,-value2,alpha=0.7)
plt.grid(True)
plt.xticks(x0,attr)
#添加标签
for x,y in zip(x0,value1):
plt.text(x,y,'%d'%y,va='bottom')
for x,y in zip(x0,value2):
plt.text(x,-y,'%d'%y,va='top')
参考:
法比奥·内利. Python数据分析实战:第2版.北京:人民邮电出版社, 2019.11.