【matplotlib】可视化解决方案——如何正确使用bar方法

前言

matplotlib 库是一个非常强劲的 Python 的2D 绘图库。其中 pyplot 库是 matplotlib 的基于状态的接口。它提供了类似于 MATLAB 的绘图方式。pyplot 主要用于交互式绘图和程序化绘图生成的简单情况。

导入matplotlib库

import matplotlib.pyplot as plt	#导入matplotlib库进行绘图
import numpy as np	#导入numpy库用以生成数据
#导入seaborn库用于让matplotlib有更好的绘制体验,seaborn库会更改底matplotlib库设置
import seaborn as sns	

plt.bar函数

bar函数用以绘制柱状图,适用场合是二维数据集(每个数据点包括两个值x和y),但只有一个维度需要比较,用于显示一段时间内的数据变化或显示各项之间的比较情况。

优势:因为肉眼对高度差异很敏感,柱状图利用柱子的高度,反映数据的差异。

劣势:柱状图的局限在于只适用中小规模的数据集。

其函数原型如下:

def bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)

参数详解:

  • 参数1:x : 标量型,指定x的坐标
  • 参数2:height:指定柱形图的高度,一般就是我们需要展示的数据的大小
  • 参数3:width:标量型,指定柱形图的宽度,一般0.8即可
  • 参数4:bottom:标量或标量类数组型,指定y坐标的起始高度
  • 参数5:align:指定对齐方式,可以指定中心对称或者边缘对称;
  • 参数6:kwargs:接收的关键字参数传递给关联的Rectangle。
  • 返回值:BarContainer实例,其patches属性是柱体的列表。

参数指定

bar 函数绘制柱状图的时候可以有两种设置方式:第一种是在绘图调用 bar 函数的时候直接指定参数从而设置属性。第二种方法是绘图完毕后对返回的 Rectangle 实例进行属性设置:

画图的时候直接指定参数

patch = plt.bar(
          x=np.arange(0, 20),	#指定柱体X坐标
          height=np.random.randint(0, 100, 20),	#指定主体高度
          width=0.8,	#指定柱体宽度:0.8
          bottom=0.0,	#指定柱体高度起始值:0.0
          align='center',	#指定对齐方式:'center'
          alpha=0.5,	#指定透明度:0.5
          color='#BC8F8F',	#指定柱体颜色:'#BC8F8F'
          edgecolor='#BC8F8F',	#指定边缘颜色:'#BC8F8F'
          lw=1.0,	#指定边缘线宽:1.0
          linestyle=None,	#指定边缘线条样式:None
          capstyle='butt',	#指定笔帽样式:'butt'
          fill=True,	#指定填充柱体
          joinstyle='miter',	#指定柱体边角连接模式:'miter'
          hatch=None,	#指定柱体阴影:None
          antialiased=True,	#指定进行抗锯齿
          label='随机生成0到100之间的20个整数bar示例',	#指定图例的显示内容
)
plt.title('bar示例', fontsize=20)	#指定绘图标题
plt.legend()	#打开图例
plt.grid(True)	#打开网格
plt.xlabel('X', fontsize=20)	#指定X坐标轴标题
plt.ylabel('Y', fontsize=20)	#指定Y坐标轴标题
plt.show()

画图结果如下:
在这里插入图片描述

使用set_property方法

每一个 Artist 对象都可以使用 set_property 方法设置属性,示例代码如下:

patch[0].set_linewidth(15)
patch[0].set_facecolor('#000000')

画图结果如下:
在这里插入图片描述

应用

示例1添加柱体标签

使用反馈设置方法最大的用处在于自动添加柱体标签,自动添加标签的代码如下:

    # 柱状图自动添加标签
    def autolabel(self, rects):
        """
        自动标定柱状图柱体高度
        rects:要进行标定的Rectangle类列表
        """
        for rect in rects:
            height = rect.get_height()
            plt.annotate(format(height, '.2f'),
                                    xy=(rect.get_x() +
                                        rect.get_width() / 2, height),
                                    xytext=(0, 2),  # 垂直偏移两格
                                    textcoords="offset points",
                                    ha='center',
                                    va='bottom')

传递一个包含Rectangle类的列表作为参数从而进行自动添加标签。

不同参数的影响

不同参数的可视化区如下图所示:
在这里插入图片描述
程序代码如下:

X = np.arange(0, 20, 2)
Y = 2*X+3
plt.figure(figsize=(12, 10))

#原始图像
ax = plt.subplot(331)
rects = plt.bar(X, Y, width=0.8, edgecolor='#FF0000')
ax.set_title('width=0.8')
autolabel(rects=rects)

#更改bottom属性
ax = plt.subplot(332)
rects = plt.bar(X, Y, width=0.8, bottom=10, edgecolor='#FF0000')
ax.set_title('bottom=10')
autolabel(rects=rects)

#更改align属性
ax = plt.subplot(333)
rects = plt.bar(X, Y, width=0.8, align='edge', edgecolor='#FF0000')
ax.set_title('align=edge')
autolabel(rects=rects)

#更改lw属性
ax = plt.subplot(334)
rects = plt.bar(X, Y, width=0.8, lw=2, edgecolor='#FF0000')
ax.set_title('lw=2')
autolabel(rects=rects)

#更改hatch属性
ax = plt.subplot(335)
rects = plt.bar(X, Y, width=0.8, hatch='o', edgecolor='#FF0000')
ax.set_title('hatch=o')
autolabel(rects=rects)

#更改alpha属性
ax = plt.subplot(336)
rects = plt.bar(X, Y, width=0.8, alpha=0.3, edgecolor='#FF0000')
ax.set_title('alpha=0.3')
autolabel(rects=rects)

#更改edgecolor属性
ax = plt.subplot(337)
rects = plt.bar(X, Y, width=0.8, edgecolor='#FF0FF0')
ax.set_title('edgecolor=#FF0FF0')
autolabel(rects=rects)

#更改facecolor属性
ax = plt.subplot(338)
rects = plt.bar(X, Y, width=0.8, facecolor='#FFF000', edgecolor='#FF0000')
ax.set_title('facecolor=#FFF0000')
autolabel(rects=rects)

#更改joinstyle属性
ax = plt.subplot(339)
rects = plt.bar(X, Y, width=0.8, joinstyle='bevel', edgecolor='#FF0000')
ax.set_title('joinstyle=bevel')
autolabel(rects=rects)
plt.show()

往期回顾

  1. 【matplotlib】可视化解决方案——如何向画布中添加坐标轴
  2. 【matplotlib】可视化解决方案——如何正确使用matplotlib颜色系统
  3. 【matplotlib】可视化解决方案——如何实现画布局部放大功能
  4. 【matplotlib】可视化解决方案——如何更改matplotlib配置信息
  5. 【matplotlib】可视化解决方案——如何定制化网格
  6. 【matplotlib】可视化解决方案——如何向画布添加交叉直线
  7. 【matplotlib】可视化解决方案——如何解决matplotlib中文乱码问题
  8. 【matplotlib】可视化解决方案——如何设置matplotlib风格集
  9. 【matplotlib】可视化解决方案——如何设置轴标签的透明度和大小
  10. 【matplotlib】可视化解决方案——如何向图表中添加数据表

文中难免会出现一些描述不当之处(尽管我已反复检查多次),欢迎在留言区指正,相关的知识点也可进行分享,希望大家都能有所收获!!如果觉得我的文章写得还行,不妨支持一下。你的每一个转发、关注、点赞、评论都是对我最大的支持!

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小猪猪家的大猪猪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值