参考:  https://blog.csdn.net/jenyzhang/article/details/52047557

     https://blog.csdn.net/liangzuojiayi/article/details/78187704

需求:

封装一个带分组功能的bar绘制函数

绘制效果:

代码:

 # -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt class Bar(object):
r'''
请使用with打开绘图
'''
def __init__(self):
self.colors=[
"#0ed4e8",
"#318bae",
"#6b914c",
"#8492c3",
"#495aa2",
"#6841ac",
"#aa6547",
"#aaa350",
] def __call__(self,quants=None,labels=None,**kwargs):
self.draw(quants,labels,**kwargs)
def __enter__(self):
plt.figure(figsize=(10,10))
return self
def __exit__(self, exc_type, exc_val, exc_tb):
plt.show()
plt.close()
def draw(self,quants=None,labels=None,**kwargs):
if not quants:
print('数据为空')
return
if type(quants[0]) == int or type(quants[0]) == float:
num_label = 1
isInt = True
else:
num_label = len(quants[0])
isInt = False
width = 0.4
ind = np.linspace(0.5, 9.5, len(quants))
X=ind - width / 2
xlabels_pos=X+(num_label-1)*width / 2
if isInt:
plt.bar(X, quants, width, color='green')
else:
quants=np.array(quants)
if type(kwargs.get('classlabels', '')) == list:
classlabels = kwargs.get('classlabels', '')
plt.legend(loc='upper right')
else:
classlabels = ['']*len(quants[0])
for i in range(len(quants[0])):
plt.bar(X+width*i, quants[:,i], alpha=0.9, width=width, facecolor=self.colors[i], edgecolor='white', label=classlabels[i], lw=1)
# labels
plt.xlabel(kwargs.get('xlabel', 'x'))
plt.ylabel(kwargs.get('ylabel', 'y'))
if not labels:
labels = list(range(1, len(quants) + 1))
plt.xticks(xlabels_pos, labels)
# title
plt.title(kwargs.get('title', ''))
plt.grid(linestyle='-.') if __name__=="__main__":
labels = ['USA', 'China', 'India', 'Japan', 'Germany', 'Russia', 'Brazil', 'UK', 'France', 'Italy']
quants = [15094025.0, 11299967.0, 4457784.0, 4440376.0, 3099080.0, 2383402.0, 2293954.0, 2260803.0, 2217900.0,
1846950.0]
labels3 = ['USA', 'China', 'India']
quants3= [[15094025.0, 11299967.0, 4457784.0], [4440376.0, 3099080.0, 2383402.0], [2293954.0, 2260803.0, 2217900.0]]
with Bar() as bar:
plt.subplot(2,1,1)
bar(quants3,labels3,xlabel="xlabel3",ylabel='ylabel3',title='title3',classlabels=["A",'B','C'])
plt.subplot(2, 1, 2)
bar(quants, labels, xlabel="xlabel", ylabel='ylabel', title='title',)

matplotlib bar函数重新封装的更多相关文章

  1. 使用matplotlib中的bar函数绘制柱状图

    使用柱状图显示三日电影的票房信息 要显示的数据为2018年12月7日-9日四场电影的票房信息 四场电影分别为:无名之辈,狗十三,毒液:知名守卫者,憨豆特工3 2018年12月7日四场电影票房分别为:[ ...

  2. 辛巴学院-Unity-剑英陪你零基础学c#系列(四)函数和封装

    辛巴学院:正大光明的不务正业. 国庆长假结束了,我的心情是这样的: 你总是起不早,起不早独自一个人沉睡到天亮你无怨无悔的梦着那副本我知道你根本就不想上班你总是起不早,起不早放假总是短暂,上班太难请个病 ...

  3. js-特效部分学习-offsetParent、scrollHeight 、动画函数的封装

    1. offsetParent  获取的最近的定位的父元素   offsetLeft/offsetTop  是相对于offsetParent的距离 offsetHeight/offsetWidth 获 ...

  4. JS —— 轮播图中的缓动函数的封装

    轮播图的根本其实就是缓动函数的封装,如果说轮播图是一辆跑动的汽车,那么缓动函数就是它的发动机,今天本文章就带大家由简入繁,封装属于自己的缓动函数~~ 我们从需求的角度开始,首先给出一个简单需求: 1. ...

  5. JAVA之旅(五)——this,static,关键字,main函数,封装工具类,生成javadoc说明书,静态代码块

    JAVA之旅(五)--this,static,关键字,main函数,封装工具类,生成javadoc说明书,静态代码块 周末收获颇多,继续学习 一.this关键字 用于区分局部变量和成员变量同名的情况 ...

  6. Halcon小函数的封装和代码导出

    一.Halcon小函数的封装和修改 1.名词解释: 算子:指Halcon中最基础.最底层的函数(即你看不到它的代码实现),一个算子只有一句话,例如threshold算子. 小函数:由多个算子组合成的函 ...

  7. c#类—成员函数和封装及构造函数、析构函数、静态成员

    C# 类(Class) 当您定义一个类时,您定义了一个数据类型的蓝图.这实际上并没有定义任何的数据,但它定义了类的名称意味着什么,也就是说,类的对象由什么组成及在这个对象上可执行什么操作.对象是类的实 ...

  8. vue 工具函数的封装 时间格式化函数

    时间代码格式化工具函数的封装 小伙伴们,多封点工具函数,多封装点公共组件,多写点公共样式,照顾下互联网行业的新人把....~~~~~ /** yyyymmdd(new Date) -> &quo ...

  9. C语言基础知识:几种特殊的函数宏封装方式

    函数宏介绍 函数宏,即包含多条语句的宏定义,其通常为某一被频繁调用的功能的语句封装,且不想通过函数方式封装来降低额外的弹栈压栈开销. 函数宏本质上为宏,可以直接进行定义,例如: #define INT ...

随机推荐

  1. PhotoZoom安装之后没有快捷方式怎么解决?

    相信初次安装PhotoZoomPro的小伙伴都有这样的经历,就是软件安装完成之后桌面上并没有生成快捷方式,而且在所有程序里也找不到这个软件.这样的话,对于下次启动软件就相当困难了,甚至有些朋友为此又重 ...

  2. ubantu上搭建hive环境

    上次我们在ubantu上安装了hadoop,那我们现在再进一步,开始我们的学习之旅--hive板块吧! 第一步:准备! 软件: I.一个搭建好的hadoop环境 II.hive的bin文件(前往apa ...

  3. jenkins 展示报告

    1.下载插件 HTML Publisher plugin 2.设置说明 3.展示css 下载插件 (1).Startup Trigger: 可实现在Jenkins节点(master/slave)启动时 ...

  4. u-boot启动代码start.S详解360

    (1)定义入口.由于一个可执行的Image必须有一个入口点,并且只能有一个全局入口,通常这个入口放在ROM(Flash)的0x0地址,因此,必须通知编译器以使其知道这个入口,该工作可通过修改连接器脚本 ...

  5. Django - 表与ORM操作

    Django - 表与ORM操作 一. 模板语言 模板中也有自己的语言, 该语言可以实现数据展示 - {{ 变量 }} - 循环 {% for i in all_publisher %} {{ for ...

  6. JavaScript 实现留言框

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. 洛谷10月月赛II

    #A: P4924 [1007]魔法少女小Scarlet 这道题考了矩阵旋转 其实很考验推公式的能力和代码能力 这里有个小技巧 可以设(x, y)为原点,然后去推公式,然后实际操作中横坐标加上x,纵坐 ...

  8. Hdu 1429 胜利大逃亡(续) (bfs+状态压缩)

    这道题的钥匙只有10个,可以压成二进制 这里有有句非常关键的话 (k & door[x][y]) == door[x][y] 一开始以为只要(k & door[x][y]) ==1就可 ...

  9. 利用Python对文件进行批量重命名

    最近几天工作的内容是对40个项目进行考核,每个项目都需要一个考核评分表,已经有了项目的列表. 如果用常规的方法,需要复制40个文件,并逐个修改,不光工作量大,也容易出错,后期修改也不方便. 于是想到了 ...

  10. POJ 3695

    可以用容斥原理来求.求两个矩形的并的时候可以使用条件 x1=max(p.x1,q.x1);y1=max(p.y1,q.y1);x2=min(p.x2,q.x2);y2=min(p.y2,q.y2); ...