花了时间, 记录一下

# -*- coding:utf-8 -*-
import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle
import numpy as np class BarBrowser(object):
def __init__(self, rects):
self.xy = 0
self.width = 0
self.height = 0
# 这里是为了让鼠标选中画板中的矩形,用来进行变色的。需要注意visible参数
# visible是设置图形是否直接在画板进行显示的,如果设置为True,运行程序,
# 则会直接进行显示。
self.selected = ax.add_artist(
Rectangle(rects[0].get_xy(),rects[0].get_width(),rects[0].get_height(),
color='g', visible=False)
)
self._x = 0
self._is_drawed = False
self._is_called = False
self._map = {rect.xy[0]:rect.get_height() for rect in rects} def motion(self, event):
if event.ydata is None:
return True if self._is_called and self._is_drawed:
self._is_called = False
return True self.selected.set_height(event.ydata)
fig.canvas.draw() self._map[self.xy[0]] = event.ydata
self._is_called = False # 打印修正的结果
#print(self._map) def _has_picked(self, event):
# 判断是否还在同一个bin内操作?
_is_pick = event.artist.xy[0]==self._x
self._x = event.artist.xy[0]
return _is_pick def enter_axes(self, event):
# 选中一个bin, 标出绿色.
if not event.artist:
return True self._is_called = True
self._is_drawed = False
if self._has_picked(event):
return True # draw
self.xy = event.artist.xy
self.width = event.artist.get_width()
self.height = event.artist.get_height() self.selected.set_visible(True)
self.selected.set_xy(self.xy)
self.selected.set_height(self.height)
self.selected.set_alpha(0.7)
fig.canvas.draw()
# end draw
self._is_drawed = True if __name__ == '__main__':
fig = plt.figure(figsize=(10, 8), dpi=100 )
ax = fig.add_subplot(111) # 下面的两个变量是画板上要展示的数据
theyear = ['1m', '2m', '3m', '4m', '5m', '6m',
'7m', '8m', '9m', '10m', '11m', '12m'] peoplesum = [855, 770, 808, 793, 850, 795, 887, 909, 824, 879, 802, 827] xno = np.arange(len(theyear)) # 绘制柱形图。这里需要注意picker属性,它决定了'pick_event'是否被激活
# 取值可以是浮点型、布尔值或者函数。这里我们设置为True。
rects = ax.bar(xno, peoplesum, picker=True)
plt.xticks(xno, theyear) # 设置x轴坐标 browser = BarBrowser(rects)
fig.canvas.mpl_connect('pick_event', browser.enter_axes)
fig.canvas.mpl_connect('button_press_event', browser.motion) plt.show()

python交互图的更多相关文章

  1. [Python]Flask构建网站分析应用

    原文Saturday morning hacks: Building an Analytics App with Flask - 由orangleliu友情翻译 ,主要是通过埋点技术来实现web网页的 ...

  2. python 面向对象终极进阶之开发流程

    好了,你现在会了面向对象的各种语法了,  但是你会发现很多同学都是学会了面向对象的语法,却依然写不出面向对象的程序,原因是什么呢?原因就是因为你还没掌握一门面向对象设计利器, 此刻有经验的人可能会想到 ...

  3. Python设计模式 - UML - 对象图(Object Diagram)

    简介 对象图和类图的基本概念是类似的,可以看作类图在系统某一时刻的镜像,显示了该时刻系统中参与交互的各个对象以及它们之间的关系. 对象图的元素包括对象.链接.包,元素之间的关系和类图相似. 对象图建模 ...

  4. 小众Python库介绍

    Python 是世界上发展最快的编程语言之一.它一次又一次地证明了自己在开发人员和跨行业的数据科学中的实用性.Python 及其机器学习库的整个生态系统使全世界的用户(无论新手或老手)都愿意选择它.P ...

  5. python day 17: UML(统一建模语言)

    python day 17 UML:unified modeling languages,是一种基于面向对象的可视化建模语言. 画图语言:画图要合理.即符合逻辑. 历史: 3.1. 软件功能越来越强大 ...

  6. python中文语料分词处理,按字或者词cut_sentence

    cut_sentence.py import string import jieba import jieba.posseg as psg import logging #关闭jieba日制 jieb ...

  7. python面试题三:Python 网络编程与并发

    1 简述 OSI 七层协议. OSI七层协议模型主要是: 应用层(Application):为用户的应用程序(例如电子邮件.文件传输和终端仿真)提供网络服务. 表示层(Presentation):使用 ...

  8. Python中的多进程与多线程(一)

    一.背景 最近在Azkaban的测试工作中,需要在测试环境下模拟线上的调度场景进行稳定性测试.故而重操python旧业,通过python编写脚本来构造类似线上的调度场景.在脚本编写过程中,碰到这样一个 ...

  9. Python高手之路【六】python基础之字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

随机推荐

  1. 深度学习之常用linux命令总结

    深度学习中常用linux命令总结 1.创建文件夹 mkdir 文件名2.删除文件 rm -d 目录名 #删除一个空目录 rmdir 目录名 #删除一个空目录 rm -r 目录名 #删除一个非空目录 r ...

  2. leetcode(数据结构)—— 镜像二叉树

    镜像二叉树,力扣上面的的题目,这道题很简单,放出来的原因是它要求用两种解法来写这道题——递归和迭代,而且数据结构学到了树,记录自己学习的过程,以免忘了,没地方找. 题目的意图很明显,就是然你写个程序看 ...

  3. golang调用CertUtil获取文件md5

    func getFileMD5(fileName string) string { cmd := exec.Command("cmd", "/C", " ...

  4. VS2013+HALCON13

    HALCON安装与配置(VS2013+HALCON13) 2017-06-23 16:08:25 坚强的羊脂球 阅读数 4574更多 分类专栏: HALCON   配置主要分为三部分: 1)VS调用H ...

  5. c++数据结构排序

    #include<stdio.h> #include<stdlib.h> #include<time.h> typedef int ElemType; typede ...

  6. JS - 对话框

    1,<span onclick="return confirmAct();">执行操作</span> 2, function confirmAct(){ i ...

  7. mongodb - schema中格式时间

       date:{ type: String,        default: () => moment(new Date()).format('YYYY-MM-DD HH:mm:ss'),   ...

  8. tensorflow学习笔记(三)常用函数

    上一篇简单介绍了tensorflow的基本操作,这一篇介绍一些常用的函数. tf.constant() tf.constant ( value , dtype = None , shape = Non ...

  9. java核心-多线程(1)-知识大纲

    Thread,整理一份多线程知识大纲,大写意 1.概念介绍 线程 进程 并发 2.基础知识介绍 Java线程类 Thread 静态方法&实例方法 Runnable Callable Futur ...

  10. 九十七、SAP中ALV事件之十,通过REUSE_ALV_COMMENTARY_WRITE函数来显示ALV的标题

    一.SE37查看REUSE_ALV_COMMENTARY_WRITE函数 二.查看一下导入 三.我们点击SLIS_T_LISTHEADER,来看一下类型 四.我们再看一下,这个info是60长度的字符 ...