python中图形交互_python交互图

此篇博客介绍了如何使用Python和Matplotlib创建一个交互式的BarBrowser类,通过鼠标操作实时调整柱状图高度,实现对数据的动态选择和可视化。通过`motion`和`enter_axes`方法,用户可以方便地在不同月份的数据上进行颜色修改,直观展现数据变化。
摘要由CSDN通过智能技术生成

花了时间, 记录一下

# -*- 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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值