目录
一、matplotlib.pyplot.bar()语法
二、 matplotlib.pyplot.barh()语法
三、绘制条形图
①绘制简单垂直条形图(pyplot编程方式)
②绘制简单水平条形图 (面向对象编程方式)
③绘制带样式的垂直条形图(pyplot与面向对象结合编程方式)
④绘制带样式的水平条形图(面向对象编程方式)
⑤分组条形图(面向对象编程方式)
⑥堆叠条形图(面向对象编程方式)
⑦对称条形图(面向对象与pyplot结合编程方式)
编程方式选择面向对象与pyplot方式最佳
说明:matplotlib.pyplot.bar()绘制的都是垂直条形图
ax.bar(x, height, width=0.8, bottom=None, *, align='center',
data=None, **kwargs)
plt.bar(
x, #x轴坐标
height, #主体高度
width=0.8, #指定条形宽度 默认值:0.8
bottom=0.0, #指定y轴高度起始值 默认值:0.0
align='center' or 'edge', #指定对齐方式:center:中心堆成 edge:边缘对称
alpha, #指定透明度
color, #指定条形颜色
ec, #指定条形图边缘颜色(是edgecolor的缩写)
lw, #指定条形图边缘线宽(是linewidth的缩写)
ls, #指定条形图边缘线条样式(是linestyle的缩写)
fill=True or False, #是否填充颜色
yerr, #指定误差大小,用于在条形图上添加误差线
ecolor, #指定误差线的颜色
joinstyle='miter' or 'round' or 'bevel', #指定条形图边角连接模式
hatch={'/', '\\', '|', '-', '+', 'x', 'o', 'O', '.', '*'}, #指定条形阴影
label #指定图例的显示内容
)
参数:joinstyle
from matplotlib._enums import JoinStyle
JoinStyle.demo()
说明:matplotlib.pyplot.barh()绘制的都是水平条形图
barh(y, width, height=0.8, left=None, *, align='center', **kwargs)
plt.barh(
y, #y轴坐标
width, #主体长度
height=0.8, #指定条形宽度 默认值:0.8
left=0.0, #指定x轴高度起始值 默认值:0.0
align='center' or 'edge', #指定对齐方式:center:中心堆成 edge:边缘对称
alpha, #指定透明度
color, #指定条形颜色
ec, #指定条形图边缘颜色(是edgecolor的缩写)
lw, #指定条形图边缘线宽(是linewidth的缩写)
ls, #指定条形图边缘线条样式(是linestyle的缩写)
fill=True or False, #是否填充颜色
yerr, #指定误差大小,用于在条形图上添加误差线
ecolor, #指定误差线的颜色
joinstyle='miter' or 'round' or 'bevel', #指定条形图边角连接模式
hatch={'/', '\\', '|', '-', '+', 'x', 'o', 'O', '.', '*'}, #指定条形阴影
label #指定图例的显示内容
)
import matplotlib.pyplot as plt
import numpy as np
x=np.arange(0,11)
y=np.random.random(11)
# xticks设置x轴刻度值
plt.xticks(x)
plt.bar(x,y)
plt.show()
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif']=['FangSong']
plt.figure(figsize=(5,5))# 绘制一个5*5的画布
ax=plt.axes()
x=np.arange(0,6)
y=np.random.random(6)
ax.barh(x,y)
plt.show()
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['FangSong']
fig=plt.figure(figsize=(12,8))
ax=plt.axes()
x=['我们的父辈','这个杀手不太冷静','肖申克的救赎','狙击手','辛德勒的名单','长津湖']
y=[9.6,7.8,9.7,7.8,9.5,8.9]
ax.bar(x,y,width=0.5,color='#EEE8AA',ec='#A0522D',linewidth='5',yerr=0.5,ecolor='#800000',align='center',bottom=0,alpha=0.5,linestyle='-,fill=True,joinstyle='bevel',hatch='/',
label='电影评分图例')
for x,y in zip(x,y):
ax.text(x,y,s=y,size=20) # 添加条形标签
plt.xticks(size=15) # 修改X轴刻度值字体大小
plt.yticks(size=20) # 修改y轴刻度值字体大小
plt.rcParams.update({'font.size':15}) # 设置图例字体大小
plt.title('电影评分图例展示',fontsize=25) # 设置图标标题
plt.xlabel('电影名称',fontsize=20) # 设置x轴标题
plt.ylabel('电影评分',fontsize=20) # 设置y轴标题
ax.grid() # 显示网格线
ax.legend() # 显示图例
plt.show()
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif']=['FangSong']
plt.figure(figsize=(8,8))# 绘制一个8*8的画布
ax=plt.axes()
name=['日用品','化妆品','生活费','水电费','其他开支']
spend=[500,1000,2000,200,500]
ax.barh(name,spend,height=0.5,color='#EEE8AA',ec='#A0522D',linewidth='5',align='center',left=0,alpha=0.5,
linestyle='-',fill=True,joinstyle='bevel',hatch='o',label='消费金额')
ax.set_xticks(spend,size=15) # 修改X轴刻度值字体大小
ax.set_yticks(name,size=20) # 修改y轴刻度值字体大小
ax.set_title('日常开支水平条形图',fontsize=30) # 设置图标标题
ax.set_xlabel('消费金额(元)',fontsize=20) # 设置x轴标题
ax.set_ylabel('支出方式',fontsize=20) # 设置y轴标题
ax.grid(axis='x') # 设置仅显示x轴网格线
ax.legend() # 显示图例
plt.show()
注意:绘制分组条形图时,尽量用一个变量名来接收,方便后期修改。(如下图bar_width=0.2)
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif']=['FangSong'] # 设置正常显示中文 字体为仿宋
plt.figure(figsize=(13,10)) # 设置画布 大小为13*10
ax=plt.axes()
name=['小红','小绿','小黄','小紫']
first=[50,70,80,60] # 第一次语文成绩
second=[60,80,75,65] # 第二次语文成绩
third=[75,90,60,70] # 第三次语文成绩
bar_width=0.2 # 条形宽度
ax.bar(name,first,label='第一次语文成绩',width=bar_width,align='center',color='#00FA9A')
ax.bar(np.arange(4)+bar_width,second,label='第二次语文成绩',width=bar_width,align='center',color='#EEE8AA')
ax.bar(np.arange(4)+bar_width*2,third,label='第三次语文成绩',width=bar_width,align='center',color='#FFB6C1')
ax.set_xticks(name) # 设置x轴标签
ax.set_yticks(np.arange(0,110,10)) # 设置y轴标签
ax.set_title('语文成绩分组图',fontsize=30) # 设置标题
ax.set_xlabel('姓名',fontsize=20) # 设置x轴标签
ax.set_ylabel('成绩',fontsize=20) # 设置y轴标签
ax.legend()# 显示图例
plt.show()
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif']=['FangSong']
fig=plt.figure(figsize=(10,9))
ax=plt.axes()
name=['日用品','化妆品','生活费','水电费','其他开支']
first=[500,1000,2000,200,500]
second=[300,1500,1800,250,800]
third=[400,800,2200,200,600]
bar_width=0.3
ax.bar(np.arange(5),first,width=bar_width,label='第一个月花费金额',color='#FFDA89')
ax.bar(np.arange(5),second,bottom=first,width=bar_width,label='第二个月花费金额',color='#F4A460')
ax.bar(np.arange(5),third,bottom=np.array(first)+np.array(second),width=bar_width,label='第三个月花费金额',color='#8B0000')
ax.set_xticks(np.arange(5),name)
ax.set_title('三个月花销堆叠图',size=30)
ax.set_xlabel('支出方式',size=20)
ax.set_ylabel('支出金额(元)',size=20)
plt.legend()
plt.show()
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif']=['FangSong']
plt.rcParams['axes.unicode_minus'] = False # 设置符号显示正常
fig=plt.figure(figsize=(10,9))
ax=plt.axes()
hobby=['打篮球','逛街','打游戏','打羽毛球','踢足球','看电影']
hobby_man=np.array([10,1,15,13,11,6])
hobby_woman=np.array([2,20,5,15,1,10])
ax.barh(range(6),hobby_man,label='男生',color='#191970',height=0.3,align='center')
ax.barh(range(6),-hobby_woman,label='女生',color='#FFB6C1',height=0.3,align='center')
plt.yticks(range(6),hobby)
plt.xticks(np.arange(-20,25,5))
plt.title('两极分化对称条形图',size=30)
plt.ylabel('爱好',size=20)
plt.xlabel('人数',size=20)
plt.legend()
plt.show()
总结:编程方式选择面向对象编程与pyplot编程方式结合在一起为最佳