1.matplotlib模块
应用matplotlib模块绘制条形图,需要调用bar函数,关于该函数的语法和参数含义如下:
bar(x, height, width=0.8, bottom=None, color=None, edgecolor=None,
linewidth=None, tick_label=None, xerr=None, yerr=None,
label = None, ecolor=None, align, log=False, **kwargs)
- x:传递数值序列,指定条形图中x轴上的刻度值。
- height:传递数值序列,指定条形图y轴上的高度。
- width:指定条形图的宽度,默认为0.8。 bottom:用于绘制堆叠条形图。
- color:指定条形图的填充色。
- edgecolor:指定条形图的边框色。
- linewidth:指定条形图边框的宽度,如果指定为0,表示不绘制边框。
- tick_label:指定条形图的刻度标签。
- xerr:如果参数不为None,表示在条形图的基础上添加误差棒。
- yerr:参数含义同xerr。
- label:指定条形图的标签,一般用以添加图例。
- ecolor:指定条形图误差棒的颜色。
- align:指定x轴刻度标签的对齐方式,默认为center,表示刻度标签居中对齐,如果设置为edge,则表示在每个条形的左下角呈现刻度标签。
- log:bool类型参数,是否对坐标轴进行log变换,默认为False。
- **kwargs:关键字参数,用于对条形图进行其他设置,如透明度等。
bar函数的参数同样很多,希望读者能够认真地掌握每个参数的含义,以便使用时得心应手。下面将基于该函数绘制三类条形图,分别是单变量的垂直或水平条形图、堆叠条形图和水平交错条形图。
2.水平条形图
(1)使用barh()函数绘制条形图
import numpy as np
import matplotlib.pyplot as plt
y = np.arange(5)
x1 = np.array([10,8,7,11,13])
bar_height = 0.3 ## 条形的高度
plt.barh(y,x1,tick_label=['a','b','c','d','e'],height=bar_height) ##绘制条形图
plt.show()
(2)使用pyplot的barh()函数绘制多组条形的条形图
例题一
import numpy as np
import matplotlib.pyplot as plt
y = np.arange(5)
x1 = np.array([10,8,7,11,13])
x2 = np.array([9,6,5,10,12])
bar_height = 0.3
plt.barh(y,x1,tick_label=['a','b','c','d','e'],height=bar_height)
plt.barh(y+bar_height,x2,height=bar_height)
plt.show()
例题二
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
df = pd.read_excel(r'D:\2-3.xls')
x = np.array(df['替代率'])
y = np.arange(1,19)
labels = df['商品种类']
plt.barh(y,x,tick_label=labels,align="center",height=0.6)
plt.show()
例题三
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
df = pd.read_excel(r'D:\2-3.xls')
x = df['替代率']
y = np.arange(len(df))
labels = df['商品种类']
plt.barh(y, x, tick_label=labels, align="center", height=0.6)
plt.show()
例题四
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
y = ['家政、家教、保姆等生活服务',
'飞机票、火车票',
'家具','手机、手机配件',
'计算机及其配套产品','汽车用品',
'通信充值、游戏充值','个人护理用品',
'书报杂志及音像制品','餐饮、旅游、住宿',
'家用电器','视频、饮料、烟酒、保健品',
'家庭日杂用品','保险、演出票务',
'服装、鞋帽、家用纺织品','数码产品',
'其他商品和服务','工艺品、收藏品']
x = [95.9,95.1,93.5,92.4,89.3,89.2,
86.5,86.3,86.0,85.6,85.4,83.5,
82.6,81.6,79.8,76.5,76.3,67.0]
plt.xlabel('替代率 (%)')
plt.ylabel('商品种类')
plt.barh(y,x)
plt.show()
3.堆积图
import numpy as np
import matplotlib.pyplot as plt
x = ['购物', '人情往来', '餐饮美食', '通信物流', '生活日用', '交通出行', '休闲娱乐']
ly = [2202, 2234, 1924, 2157, 1985, 3014, 2310]
hy = [957, 1234, 1201, 784, 2147, 1423, 982]
index = np.arange(len(x))
bar_height = 0.35
plt.barh(index, ly, bar_height, label='低', color='b')
plt.barh(index, hy, bar_height, label='高', left=ly, color='r')
plt.yticks(index, x)
plt.legend()
plt.show()