花了时间, 记录一下

# -*- 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. CSS样式表——样式2

    样式 5)边界边框 margin:0px;                                            //外边距为0 margin:10px 0px 0px 10px;   ...

  2. validate表单验证-单独验证

    今天编写一个表单验证程序,我来说一下今天遇到的坑:程序不是通过submit按钮提交验证的,是在自己写的一个方法中提交的,出现了表单无法验证的情况.然后我就了解了一下jquery validate的验证 ...

  3. Microsoft Windows 实用程序 Sysinternals Utilities Index

    最新页面时间:2017年5月16日 Sysinternals被MS收购--windows internals共近70多个工具集 Sysinternals套件 整套Sysinternals Utilit ...

  4. Nifi简介及核心概念整理

    简介 Apache NiFi 是一个易于使用.功能强大而且可靠的数据拉取.数据处理和分发系统,用于自动化管理系统间的数据流. 它支持高度可配置的指示图的数据路由.转换和系统中介逻辑,支持从多种数据源动 ...

  5. 八数码问题 双向BFS/Hsh链表存储

    转自洛谷 作者EndSaH #include<iostream> #include<string> #include<cmath> #include<cstr ...

  6. nginx location语法解释

    1.没有修饰符 表示:必须以指定模式开始,如:              默认模式 server { server_name baidu.com; location /abc { …… } } htt ...

  7. 小程序开发顶部TAB栏和侧边分类点击

    先上一个效果图: 根据这个效果图我来说内容. 首先是顶部tab栏 效果实现依靠的是一个组件scroll-view.这个组件很有意思,可以多层嵌套,当然它的属性也很多. 这里主要用的是scroll-x, ...

  8. 035-PHP简单定义一个闭包函数

    <?php /* + 什么是闭包函数?即一个函数内部,包含了1-N个匿名函数, + 用处是可以做局部数据缓存与实现封装(有点类似class) */ # 函数内部,定义一个匿名函数,即可称为闭包函 ...

  9. 168-PHP 输出系统当前时间

    <body style="font-family:'华文彩云'; color:#0000CC; font-size:20px"> 系统的当前时间是: <?php ...

  10. C#获取图片的某个区域

            /// <summary>        /// http://www.cnblogs.com/KissKnife/archive/2007/10/13/923352.ht ...