目录

一、matplotlib.pyplot.bar()语法

二、 matplotlib.pyplot.barh()语法

三、绘制条形图

①绘制简单垂直条形图(pyplot编程方式)

②绘制简单水平条形图 (面向对象编程方式)

③绘制带样式的垂直条形图(pyplot与面向对象结合编程方式)

④绘制带样式的水平条形图(面向对象编程方式)

⑤分组条形图(面向对象编程方式)

⑥堆叠条形图(面向对象编程方式)

⑦对称条形图(面向对象与pyplot结合编程方式)


编程方式选择面向对象与pyplot方式最佳

一、matplotlib.pyplot.bar()语法

说明: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()语法

说明:matplotlib.pyplot.barh()绘制的都是水平条形图

  • y,width,height与bar()里的x,height,width相反
  • left等同于bar()里的bottom 不同的时left作用于x轴,bottom作用于y轴
  • 其他参数作用与bar()参数一致
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   #指定图例的显示内容
)

三、绘制条形图

①绘制简单垂直条形图(pyplot编程方式)

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()

③绘制带样式的垂直条形图(pyplot与面向对象结合编程方式)

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()

⑦对称条形图(面向对象与pyplot结合编程方式)

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编程方式结合在一起为最佳

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐