花了时间, 记录一下

# -*- 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. wincc的服务器-客户机模式具体做法(全抄-未测试)

    一.原来的工作方式:在同一工作组中4台计算机其windows名分别为A.B.C.D且都已安装好wincc5.0+sp2,原来在每台计算机上运行的均是单用户,4台计算机上实际运行的是一个相同的项目,最先 ...

  2. 构造方法与setter方法

    上一个随笔提到了constructor-arg子标签,此随笔将会介绍一些类型的赋值方法 ①String类型.基本数据类型或其包装类都可以使用value标签属性赋值 String类型和基本类型的操作如下 ...

  3. 软件包管理:RPM包管理-yum在线管理

    CentOS 是免费的的 RedHat需要付费 1.IP地址配置 setup  #使用setup工具 (这种方式配置的永久有效 同时还可以配置掩码 网关等) 直接输入setup就会弹出(注意的是该命令 ...

  4. golang 读取 chrome保存的网站账号信息

    package main import ( "database/sql" "fmt" "log" "os" " ...

  5. [JZOJ]1293.气象牛[区间DP]

    Description 为了研究农场的气候,Betsy帮助农夫John做了N(1 <= N <= 100)次气压测量并按顺序记录了结果M_1-M_N(1 <= M_i <= 1 ...

  6. 记录第一次制作pypi包的过程

    准备工作 1.创建一个项目文件夹 mkdir dada_openapi_python cd dada_openapi_python 2.创建包文件夹 在里面在创建一个 dada_openapi_cli ...

  7. 一百一十一、SAP的OO-ALV之五,显示ALV表格

    一.在屏幕里面有2部分,(PROCESS BEFORE OUTPUT 用于显示, PROCESS AFTER INPUT用于数据处理).我们创建的display_alv函数, 二.display_al ...

  8. 051-PHP求余运算

    <?php $x=10%5; //进行求余运算 $y=10%3; //进行求余运算 $z=10%6; //进行求余运算 echo $x; //输出变量x的值 echo $y; //输出变量y的值 ...

  9. 028-PHP常用数学函数abs和acos和asin

    <?php print(abs(-));//打印绝对值 // 从 -1 到1打印acos函数的值 print("<TABLE BORDER=\"1\"> ...

  10. 106-PHP查看类成员属性

    <?php class mao{ //定义猫类 public $age; //定义多个成员属性 protected $weight; private $color; } $mao1=new ma ...