该例是实现了 Tinker 嵌入 matplotlib 所绘制的蜡烛图(k 线),数据是从 csv 读入的。花一下午做的,还很粗糙,仅供参考。python 代码如下:

import matplotlib
import matplotlib.dates as mdates import pandas as pd from matplotlib.figure import Figure
from matplotlib.finance import candlestick_ohlc
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
from matplotlib.backend_bases import key_press_handler from numpy import arange, sin, pi matplotlib.use('TkAgg') import sys
if sys.version_info[] < :
import Tkinter as Tk
else:
import tkinter as Tk root = Tk.Tk()
root.wm_title("CNY exchange rate")
root.iconbitmap('my_logo.ico') # read data
data = pd.read_csv("data.csv", index_col=, parse_dates=True)
data = data.reset_index()
data['Date2'] = data['Date'].apply(lambda d: mdates.date2num(d.to_pydatetime()))
tuples = [tuple(x) for x in data[['Date2','Open','High','Low','Close']].values] # drawArea setup
drawArea = Figure(figsize=(, ), dpi=)
ax = drawArea.add_axes([0.1, 0.2, 0.85, 0.7])
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
ax.tick_params(axis='both',
direction='out',
width=,
length=,
labelsize=,
pad=)
ax.spines['left'].set_linewidth()
ax.spines['bottom'].set_linewidth() ax.set_xticklabels(data['Date2'], rotation=, horizontalalignment='right')
ax.xaxis_date()
ax.xaxis.set_major_formatter(mdates.DateFormatter("%Y-%m-%d")) ax.set_ylabel('Price ($)', size=)
candlestick_ohlc(ax, tuples, width=., colorup='r', colordown='g'); # a tk.canvas
canvas = FigureCanvasTkAgg( drawArea, master=root)
canvas.show()
canvas.get_tk_widget().grid(row=, columnspan=) toolbar = NavigationToolbar2TkAgg(canvas, root)
toolbar.update()
toolbar.grid(row=, columnspan=)
#canvas._tkcanvas.pack(side=Tk.TOP, fill=Tk.BOTH, expand=) def _refresh():
ax.clear() data = pd.read_csv("data2.csv", index_col=, parse_dates=True)
data = data.reset_index()
data['Date2'] = data['Date'].apply(lambda d: mdates.date2num(d.to_pydatetime()))
tuples = [tuple(x) for x in data[['Date2','Open','High','Low','Close']].values] ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
ax.tick_params(axis='both',
direction='out',
width=,
length=,
labelsize=,
pad=)
ax.spines['left'].set_linewidth()
ax.spines['bottom'].set_linewidth() ax.set_xticklabels(data['Date2'], rotation=, horizontalalignment='right')
ax.xaxis_date()
ax.xaxis.set_major_formatter(mdates.DateFormatter("%Y-%m-%d")) ax.set_ylabel('Price ($)', size=)
candlestick_ohlc(ax, tuples, width=., colorup='r', colordown='g'); canvas.show() Tk.Label(root,text='Money').grid(row=,column=) defaultVar = Tk.StringVar(root)
defaultVar.set("CNY") # default value
moneyList = Tk.OptionMenu(root, defaultVar, "CNY", "USD", "EUR")
moneyList.grid(row=, column=) btnRefresh = Tk.Button(master=root, text='Refresh', command=_refresh)
btnRefresh.grid(row=, column=) Tk.mainloop()

可以用来调试的数据一例,命名为 data.csv,与上面文件同目录即可:

Date,Open,High,Low,Close
--,30.49,30.64,30.34,30.57
--,30.50,31.64,20.34,25.57
--,30.49,30.64,30.34,30.57
--,30.49,30.64,30.34,30.57
--,30.49,30.64,30.34,30.57
--,30.49,30.64,30.34,30.57
--,,30.64,30.34,30.57
--,20.49,30.64,30.34,30.57
--,10.49,30.64,30.34,30.57

python 下 tinker、matplotlib 混合编程示例一个的更多相关文章

  1. 使用 ctypes 进行 Python 和 C 的混合编程

    Python 和 C 的混合编程工具有很多,这里介绍 Python 标准库自带的 ctypes 模块的使用方法. 初识 Python 的 ctypes 要使用 C 函数,需要先将 C 编译成动态链接库 ...

  2. python下的复杂网络编程包networkx的安装及使用

    由于py3.x与工具包的兼容问题,这里采用py2.7 1.python下的复杂网络编程包networkx的使用: http://blog.sina.com.cn/s/blog_720448d30101 ...

  3. Python和C++的混合编程(使用Boost编写Python的扩展包)

    想要享受更轻松愉悦的编程,脚本语言是首选.想要更敏捷高效,c++则高山仰止.所以我一直试图在各种通用或者专用的脚本语言中将c++的优势融入其中.原来贡献过一篇<c++和js的混合编程>也是 ...

  4. Fortran与C/C++混合编程示例

    以下例子均来自网络,只是稍作了编辑,方便今后查阅. 子目录 (一) Fortran调用C语言 (二) C语言调用Fortran (三) C++ 调用Fortran (四) Fortran 调用 C++ ...

  5. python下的复杂网络编程包networkx的使用(摘抄)

    原文:http://blog.sciencenet.cn/home.php?mod=space&uid=404069&do=blog&classid=141080&vi ...

  6. python下的MySQL数据库编程

    https://www.tutorialspoint.com/python/python_database_access.htm if you need to access an Oracle dat ...

  7. Matlab与.NET基于类型安全的接口混合编程入门

    原文:[原创]Matlab与.NET基于类型安全的接口混合编程入门 如果这些文章对你有用,有帮助,期待更多开源组件介绍,请不要吝啬手中的鼠标. [原创分享]Matlab.NET混编调用Figure窗体 ...

  8. CUDA+OpenGL混合编程

    CUDA+OpenGL混合编程示例: #include <stdio.h> #include <stdlib.h> #include "GL\glew.h" ...

  9. 用c/c++混合编程方式为ios/android实现一个自绘日期选择控件(一)

    本文为原创,如有转载,请注明出处:http://www.cnblogs.com/jackybu 前言 章节: 1.需求描述以及c/c++实现日期和月历的基本操作 2.ios实现自绘日期选择控件 3.a ...

随机推荐

  1. 分布式集群系统下的高可用session解决方案

    目前,为了使web能适应大规模的访问,需要实现应用的集群部署. 而实现集群部署首先要解决session的统一,即需要实现session的共享机制. 目前,在集群系统下实现session统一的有如下几种 ...

  2. sqlserver2012更改文件组

    1.查看文件组 sql语句 SELECT Data_located_on_filegroup = fg.groupname, Table_name = obj.name FROM sysfilegro ...

  3. ORA-06502:PL/SQL :numberic or value error: character string buffer too small

    今天遇到一个错误提示:ORA-06502:PL/SQL :numberic or value error: character string buffer too small,一般对应的中文信息为:O ...

  4. Unable to open the physical file xxxx. Operating system error 2

    在新UAT服务器上,需要将tempdb放置在SSD(固态硬盘)上.由于SSD(固态硬盘)特性,所以tempdb的文件只能放置在D盘下面,而不能是D盘下的某一个目录下面. ALTER  DATABASE ...

  5. 在执行xp_cmdshell的过程中出错,调用'LogonUserW'失败,错误代码:'1909'

    在上篇文章Could not obtain information about Windows NT group/user 'xxxx\xxxx', error code 0x5里面,我介绍了SQL ...

  6. Why Do We Need a Data Warehouse?

    https://dwbi1.wordpress.com/2012/12/03/why-do-we-need-a-data-warehouse/ 经常有人来质疑数据仓库的价值,为什么我们需要花费一年多的 ...

  7. spark streaming 与 kafka 结合使用的一些概念理解

    1. createStream会使用 Receiver:而createDirectStream不会,数据会通过driver接收. 2.createStream使用 Receiver 源源不断的接收数据 ...

  8. wordpress-4.4.1 数据库表结构解析

    wordpress-4.4.1.zip 安装包  SQL结构 : wp_commentmeta  :文章评论额外信息表. CREATE TABLE IF NOT EXISTS `wp_commentm ...

  9. ARM汇编与C混合编程

    GNU内联汇编 内联汇编即在C中直接使用汇编语句进行编程,使程序可以在C程序中实现C语言不能完成的一些工作,例如,在下面几种情况中必须使用内联汇编或嵌入型汇编 程序中使用饱和算术运算(Saturati ...

  10. ubuntu下安装lrzsz

    secureCRT中可以使用rz和sz命令上传和下载文件,可是这要linux中安装了lrzsz才可以.我用的时候无法使用apt-get自动安装,下面介绍手动安装的方法. 1 下载lrzsz软件  ht ...