matplotlib bar函数重新封装
参考: 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函数重新封装的更多相关文章
- 使用matplotlib中的bar函数绘制柱状图
使用柱状图显示三日电影的票房信息 要显示的数据为2018年12月7日-9日四场电影的票房信息 四场电影分别为:无名之辈,狗十三,毒液:知名守卫者,憨豆特工3 2018年12月7日四场电影票房分别为:[ ...
- 辛巴学院-Unity-剑英陪你零基础学c#系列(四)函数和封装
辛巴学院:正大光明的不务正业. 国庆长假结束了,我的心情是这样的: 你总是起不早,起不早独自一个人沉睡到天亮你无怨无悔的梦着那副本我知道你根本就不想上班你总是起不早,起不早放假总是短暂,上班太难请个病 ...
- js-特效部分学习-offsetParent、scrollHeight 、动画函数的封装
1. offsetParent 获取的最近的定位的父元素 offsetLeft/offsetTop 是相对于offsetParent的距离 offsetHeight/offsetWidth 获 ...
- JS —— 轮播图中的缓动函数的封装
轮播图的根本其实就是缓动函数的封装,如果说轮播图是一辆跑动的汽车,那么缓动函数就是它的发动机,今天本文章就带大家由简入繁,封装属于自己的缓动函数~~ 我们从需求的角度开始,首先给出一个简单需求: 1. ...
- JAVA之旅(五)——this,static,关键字,main函数,封装工具类,生成javadoc说明书,静态代码块
JAVA之旅(五)--this,static,关键字,main函数,封装工具类,生成javadoc说明书,静态代码块 周末收获颇多,继续学习 一.this关键字 用于区分局部变量和成员变量同名的情况 ...
- Halcon小函数的封装和代码导出
一.Halcon小函数的封装和修改 1.名词解释: 算子:指Halcon中最基础.最底层的函数(即你看不到它的代码实现),一个算子只有一句话,例如threshold算子. 小函数:由多个算子组合成的函 ...
- c#类—成员函数和封装及构造函数、析构函数、静态成员
C# 类(Class) 当您定义一个类时,您定义了一个数据类型的蓝图.这实际上并没有定义任何的数据,但它定义了类的名称意味着什么,也就是说,类的对象由什么组成及在这个对象上可执行什么操作.对象是类的实 ...
- vue 工具函数的封装 时间格式化函数
时间代码格式化工具函数的封装 小伙伴们,多封点工具函数,多封装点公共组件,多写点公共样式,照顾下互联网行业的新人把....~~~~~ /** yyyymmdd(new Date) -> &quo ...
- C语言基础知识:几种特殊的函数宏封装方式
函数宏介绍 函数宏,即包含多条语句的宏定义,其通常为某一被频繁调用的功能的语句封装,且不想通过函数方式封装来降低额外的弹栈压栈开销. 函数宏本质上为宏,可以直接进行定义,例如: #define INT ...
随机推荐
- C# 基础复习 二 面向对象
继承:子承父业 子:子类 父:父类 业:所有非私有成员 好处:代码的复用 继承后,实例化子类时,不止子类的构造,父类的构造也会执行,而且父类的构造先于子类的构造执行 即使在子类可以看 ...
- .net基础总复习(3)
第三天 2.单例模式 1) 将构造函数私有化 2) 提供一个静态方法,返回一个对象 3) 创建一个单例 3.XML 可扩展的标记语言 XML:存储数据 注意: XML严格区分大小写,并且成对出现 ...
- BZOJ 2150 部落战争 (二分图匹配)
题目大意:给你一个n*m的棋盘,有一些坏点不能走,你有很多军队,每支军队可以像象棋里的马一样移动,不过马是1*2移动的,而军队是r*c移动的,军队只能从上往下移动,如果一个点已经被一直军队经过,那么其 ...
- jquery 用于操作动态元素的delegate/on方法
delegate() 方法的事件处理程序适用于当前或未来的元素(比如由脚本创建的新元素). 在做项目中有很多由ajax动态生成的html标签,jquery对这些标签不会响应\((selector).c ...
- python--(爬虫-re模块)
python--(爬虫-re模块) re模块四大核心功能: 1.findall 查找所有,返回list import re lst = re.findall("m", " ...
- SpringBoot下支付宝接口的使用
SpringBoot下支付宝接口的使用 前期准备: 参考之前写过的 支付宝接口引入servlet版本 Jar包引入: <!-- 支付宝 --> <dependency> < ...
- STM32利用TIM3产生一个1--100Hz可调频率
目标:利用TIM3结合普通GPIO实现一个1--100HZ的可控频率,误差在0.5HZ以内 核心:要实现该功能首先要明确频率的定义,频率就是1秒内发生周期性变化的次数,例如一个正弦波,1S内,走了15 ...
- java类的属性
类的嵌套!!!!!!!!!! 首先我们创建一个学生卡卡号的一个类,这个类有两个属性,校园卡号和银行卡号 package cuteSnow; public class StudentCard { pub ...
- 在JAVA中将class文件编译成jar文件包,运行提示没有主清单属性
在JAVA中将class文件编译成jar文件包,运行提示没有主清单属性 Maven 项目生成jar运行时提示“没有主清单属性” 新建了一个Maven的项目,mvn compile和mvn packag ...
- java io包File类
1.java io包File类, Java.io.File(File用于管理文件或目录: 所属套件:java.io)1)File对象,你只需在代码层次创建File对象,而不必关心计算机上真正是否存在对 ...