首页 > 其他分享 >(4-1-1)绘制柱状图:绘制基本的柱状图(1)

(4-1-1)绘制柱状图:绘制基本的柱状图(1)

时间:2024-09-04 21:53:09浏览次数:15  
标签:基本 plt bar py height 柱状图 绘制 rect

柱状图又被称为柱形图、长条图、条状图或棒形图,是一种以长方形的长度为变量的统计图表。在现实应用中,经常使用柱状图来展示数据分析的结果,这样可以更加直观的展示数据分析结果。在本节的内容中,将详细讲解使用Python绘制柱状图的知识。

4.1  绘制基本的柱状图

在数据可视化分析工作中,经常需要绘制和数据统计相关的柱状图。在本节的内容中,将详细讲解在Python程序中使用各种库绘基本柱状图的知识。

4.1.1  绘制只有一个柱子的柱状图

在Python程序中,可以使用Matplotlib很容易地绘制一个柱状图。例如在线的实例文件bar01.py中,只需使用3行代码就可以绘制一个简单地柱状图。

源码路径:codes\4\4-1\bar01.py

import matplotlib.pyplot as plt
plt.bar(x = 0,height = 1)
plt.show()

在上述代码中,首先使用import导入了matplotlib.pyplot ,然后直接调用其bar()函数绘柱状图,最后用show()函数显示图像。其中在函数bar()中存在如下两个参数。

  1. left:柱形的左边缘的位置,如果指定为1,那么当前柱形的左边缘的x值就是1.0。
  2. height:这是柱形的高度,也就是y轴的值。

执行上述代码后会绘制一个柱状图,如图4-1所示。

图4-1  执行效果

4.1.2  绘制有两个柱子的柱状图

虽然通过上述代码绘制了一个柱状图,但是现实效果不够直观。在绘制函数bar()中,参数x和height除了可以使用单独的值(此时是一个柱形)外,还可以使用元组来替换(此时代表多个矩形)。例如在下面的实例文件bar02.py中,演示了使用matplotlib绘制有两个柱子的柱状图的过程。

源码路径:codes\4\4-1\bar02.py

import matplotlib.pyplot as plt          #导入模块
plt.bar(x = (0,1),height = (1,0.5))      #绘制两个柱形图
plt.show()                          #显示绘制的图

执行效果如图4-2所示。

图4-2  执行效果

在上述实例代码中,x = (0,1)的意思是总共有两个矩形,其中第一个的左边缘为0,第二个的左边缘为1。参数height的含义也是同理。当然,此时有的读者可能觉得这两个矩形“太宽”了,不够美观。此时可以通过指定函数bar()中的width参数来设置它们的宽度。请看下面的实例文件bar03.py,功能是设置柱子的宽度width为0.35。

源码路径:codes\4\4-1\bar03.py

import matplotlib.pyplot as plt

plt.bar(x = (0,1),height = (1,0.5),width = 0.35)

plt.show()

执行效果如图4-3所示

图4-3  设置柱状图宽度

4.1.3  设置柱状图的标签

这时可能有的读者会问:需要标明x和y轴的说明信息,比如使用x轴表示性别,使用y轴表示人数。例如在下面的实例文件bar04.py中,演示了使用库matplotlib绘制有说明信息柱状图的过程。

源码路径:codes\4\4-1\bar04.py

import matplotlib.pyplot as plt
from pylab import *  
mpl.rcParams['font.sans-serif'] = ['SimHei']    		#指定默认字体  
mpl.rcParams['axes.unicode_minus'] = False   			#解决保存图像时负号'-'显示为方块的问题 
plt.xlabel(u'性别')    							#x轴的说明信息
plt.ylabel(u'人数')    							#y轴的说明信息
plt.bar(x = (0,1),height = (1,0.5),width = 0.35)
plt.show()

上述代码执行后的效果如图4-4所示。

图4-4  执行效果

接下来可以对x轴上的每个bar进行说明,例如设置第一个柱状图是“男”,第二个柱状图是“女”。此时可以通过如下实例文件bar05.py实现。

源码路径:codes\4\4-1\bar05.py

plt.xlabel(u'性别')
plt.ylabel(u'人数')
plt.xticks((0,1),(u'男',u'女'))
plt.bar(x = (0,1),height = (1,0.5),width = 0.35)
plt.show()

在上述代码中,函数plt.xticks()的用法和前面使用的x和height的用法差不多。如果你有几个bar,那么就对应几维的元组,其中第一个参数表示文字的位置,第二个参数表示具体的文字说明。不过这里有个问题,例如有时我们指定的位置有些“偏移”,最理想的状态应该在每个矩形的中间。我们可以通过直接指定函数bar()里面的align="center"就可以让文字居中了。

plt.xlabel(u'性别')
plt.ylabel(u'人数')
plt.xticks((0,1),(u'男',u'女'))
plt.bar(x = (0,1),height = (1,0.5),width = 0.35,align="center")
plt.show()

此时的执行效果如图4-5所示。

图4-5  执行效果

接下来可以通过如下代码给柱状图表加入一个标题。

plt.xlabel(u'性别')
plt.ylabel(u'人数')
plt.title(u"性别比例分析")
plt.xticks((0,1),(u'男',u'女'))
rect = plt.bar(left = (0,1),height = (1,0.5),width = 0.35,align="center")
plt.legend((rect,),(u"图例",))
plt.show()

在上述代码中用到了函数legend(),里面的参数必须是元组。即使只有一个图例也必须是元组,否则显示不正确。此时的执行效果如图4-6所示。

图4-6  执行效果

接下来还可以在每个矩形的上面标注对应的y值,此时需要使用如下通用的方法实现。

def autolabel(rects):

    for rect in rects:

        height = rect.get_height()

        plt.text(rect.get_x()+rect.get_width()/2., 1.03*height, '%s' % float(height))

在上述实例代码中,其中plt.text有三个参数,分别是:x坐标,y坐标,要显示的文字。调用函数autolabel()的具体实现代码如下所示。

autolabel(rect)

为了避免绘制矩形柱状图紧靠着顶部,最好能够空出一段距离,此时可以通过函数bar()的属性参数yerr来设置。一旦设置了这个参数,那么对应的矩形上面就会有一个竖着的线。当把yerr这个值设置得很小的时候,上面的空白就自动空出来了。

rect = plt.bar(left = (0,1),height = (1,0.5),width = 0.35,align="center",yerr=0.0001)

到此为止,一个比较美观的柱状图绘制完毕,将代码整理并保存在如下实例文件bar06.py中,具体实现代码如下所示。

源码路径:codes\4\4-1\bar06.py

import matplotlib.pyplot as plt
from pylab import *  
mpl.rcParams['font.sans-serif'] = ['SimHei']   #指定默认字体  
mpl.rcParams['axes.unicode_minus'] = False  #解决保存图像时负号'-'显示为方块的问题
def autolabel(rects):
    for rect in rects:
        height = rect.get_height()
        plt.text(rect.get_x()+rect.get_width()/2., 1.03*height, '%s' % float(height))
plt.xlabel(u'性别')
plt.ylabel(u'人数')
plt.title(u"性别比例分析")
plt.xticks((0,1),(u'男',u'女'))
#绘制柱形图
rect = plt.bar(x = (0,1),height = (1,0.5),width = 0.35,align="center",yerr=0.0001)
plt.legend((rect,),(u"图例",))
autolabel(rect)
plt.show()

上述代码执行后的效果如图4-7所示。

图4-7  执行效果

4.1.4  设置柱状图的颜色

请看下面的实例文件bar06-1.py,功能是使用库matplotlib绘制绿颜色的柱状图。

源码路径:codes\4\4-1\bar06-1.py

import matplotlib.pyplot as plt



data = [5, 20, 15, 25, 10]

plt.bar(range(len(data)), data, fc='g')

plt.show()

执行效果如图4-8所示。

图4-8  执行效果

请看下面的实例文件bar06-2.py,功能是使用库matplotlib绘制不同颜色的柱状图。

源码路径:codes\4\4-1\bar06-2.py

import matplotlib.pyplot as plt

data = [5, 20, 15, 25, 10]
plt.bar(range(len(data)), data, color='rgb')  # or `color=['r', 'g', 'b']`
plt.show()

执行效果如图4-9所示。

图4-9  执行效果

标签:基本,plt,bar,py,height,柱状图,绘制,rect
From: https://blog.csdn.net/asd343442/article/details/141894389

相关文章

  • ElasticSearch:基本原理
    文章目录写在前面常见的概念倒排索引TermIndexStoredFieldsDocValuesSegmentLuceneLucene优化高性能高拓展性高可用Node角色分化ElasticSearchElasticSearch写入流程ElasticSearch查询流程最近在项目中用到了ElasticSearch,但只是学了一下怎么用,这里对于ElasticS......
  • python 绘制折线图包括设置字体折线粗细以及标题立方m等
    #!usr/bin/envpython#-*-coding:utf-8-*-"""@author:Suyue@file:flyzhexian.py@time:2024/09/04@desc:"""importpandasaspdimportmatplotlibimportmatplotlib.pyplotaspltimportmatplotlib.tickerastickermatplot......
  • 2-STM32F103+ML307(中移4G Cat1)基本控制篇(自建物联网平台)-整体运行测试-Android扫
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/ZLIOTB/ML307/my.html"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p>  说明这节测试一......
  • 纯前端Canvas绘制海报
    封装类:/***Canvas绘制海报*/classPoster{canvas:HTMLCanvasElement;context:CanvasRenderingContext2D;constructor(el:string,width:number,height:number){constcanvas=document.querySelector<HTMLCanvasElement>(el);if(canvas......
  • 【高中数学/基本不等式】已知x>1,y>1,且lgx+lgy=4,那么lgx*lgy的最大值是?
    【问题】已知x>1,y>1,且lgx+lgy=4,那么lgx*lgy的最大值是?【来源】《精编版高考数学极致解题大招》中原教研工作室编著 P2【突破口】ab<=(a+b)^2/4【解答】lgx*lgy<=(lgx+lgy)^2/4=4^2/4=4其它方法不如此法简洁。【图像】由lgx+lgy=4可知x*y=10^4=10000,故lgx*lgy=lgx*lg(10000/x)......
  • 全面解析淘宝商品详情API接口基本信息
    要快速了解淘宝商品详情API接口基本信息,就要先知道什么是淘宝商品详情API接口。淘宝商品详情API接口是淘宝开放平台提供的一种应用程序接口,通过这些接口,开发者可以获取淘宝商品的详细信息。它允许第三方开发者通过编程方式与淘宝平台进行交互,获取淘宝商品的详细信息。这些信......
  • IPKISS 绘制 Euler Fixed Bend 的创建方法
    IPKISS绘制EulerFixedBend的创建方法正文正文在IPKISS使用Si_fabPDK创建EulerBend波导结构并导入Lumerical中产生对应仿真结构一文中我们介绍了如何使用IPKISS中的si_fab包创建EulerBend波导。这里我们介绍如何使用si_fab包创建EulerF......
  • DevExpress WinForms中文教程:Data Grid - 如何自定义绘制?
    在本教程中,您将学习如何使用DevExpressgridView(网格视图)的CustomDraw…事件,您将从一个显示普通任务数据的网格开始。首先使用事件来自定义单元格外观,然后修改相同的事件处理程序,来根据网格数据更改单个单元格中显示的文本。接下来将进一步扩展处理程序来在特定单元格中绘制图像,......
  • python 常见OS基本操作
    python常见OS基本操作Python的os模块提供了与操作系统交互的各种功能。下面按照一些常见的使用场景,按顺序介绍os模块的一些基本操作及其示例代码。1.获取和改变当前工作目录首先,通常我们会获取当前的工作目录,然后可能会改变工作目录。python深色版本importos#获取......
  • 数据结构基本概念
    组织存储数据--->内存程序=数据结构+算法定义:一组用来保存一种或者多种特定关系的数据的集合(组织和存储数据)程序的设计:将现实中大量而复杂的问题以特定的数据类型和特定的存储结构存储在内存中,并在此基础上实现某个特定的功能的操作数据与数据之间的关系:数据的逻辑结......