python 下 tinker、matplotlib 混合编程示例一个

该例是实现了 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[0] < 3:
    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=0, 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=(10, 5), dpi=100)
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=2,
               length=8,
               labelsize=12,
               pad=8)
ax.spines[‘left‘].set_linewidth(2)
ax.spines[‘bottom‘].set_linewidth(2)

ax.set_xticklabels(data[‘Date2‘], rotation=45, horizontalalignment=‘right‘)
ax.xaxis_date()
ax.xaxis.set_major_formatter(mdates.DateFormatter("%Y-%m-%d"))

ax.set_ylabel(‘Price ($)‘, size=17)
candlestick_ohlc(ax, tuples, width=.5, colorup=‘r‘, colordown=‘g‘);

# a tk.canvas
canvas = FigureCanvasTkAgg( drawArea, master=root)
canvas.show()
canvas.get_tk_widget().grid(row=1, columnspan=4)

toolbar = NavigationToolbar2TkAgg(canvas, root)
toolbar.update()
toolbar.grid(row=2, columnspan=4)
#canvas._tkcanvas.pack(side=Tk.TOP, fill=Tk.BOTH, expand=1)

def _refresh():
    ax.clear()

    data = pd.read_csv("data2.csv", index_col=0, 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=2,
                   length=8,
                   labelsize=12,
                   pad=8)
    ax.spines[‘left‘].set_linewidth(2)
    ax.spines[‘bottom‘].set_linewidth(2)

    ax.set_xticklabels(data[‘Date2‘], rotation=45, horizontalalignment=‘right‘)
    ax.xaxis_date()
    ax.xaxis.set_major_formatter(mdates.DateFormatter("%Y-%m-%d"))

    ax.set_ylabel(‘Price ($)‘, size=17)
    candlestick_ohlc(ax, tuples, width=.5, colorup=‘r‘, colordown=‘g‘);

    canvas.show()

Tk.Label(root,text=‘Money‘).grid(row=0,column=0)

defaultVar = Tk.StringVar(root)
defaultVar.set("CNY") # default value
moneyList = Tk.OptionMenu(root, defaultVar, "CNY", "USD", "EUR")
moneyList.grid(row=0, column=1)

btnRefresh = Tk.Button(master=root, text=‘Refresh‘, command=_refresh)
btnRefresh.grid(row=0, column=3)

Tk.mainloop()

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

Date,Open,High,Low,Close
2010-01-04,30.49,30.64,30.34,30.57
2010-02-04,30.50,31.64,20.34,25.57
2010-03-04,30.49,30.64,30.34,30.57
2010-04-04,30.49,30.64,30.34,30.57
2010-05-04,30.49,30.64,30.34,30.57
2010-06-04,30.49,30.64,30.34,30.57
2010-07-04,30,30.64,30.34,30.57
2010-08-04,20.49,30.64,30.34,30.57
2010-09-04,10.49,30.64,30.34,30.57
时间: 2024-10-04 20:58:57

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

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

由于py3.x与工具包的兼容问题,这里采用py2.7 1.python下的复杂网络编程包networkx的使用: http://blog.sina.com.cn/s/blog_720448d301018px7.html 处理1里面提到的那四个安装包还要: 2.需要安装 setuptools: http://wenku.baidu.com/link?url=XL2qKVZbDPh-XocJW7OVZmacM4Tio5YhCyu0Uw-E7CjhiXRrhSWI4xheERjEVC3olCZ8muN

python 与 c/c++混合编程

Python与C/C++ 模块相互调用 Python调用C动态链接库 Python调用C库很简单,不经过任何封装打包成so,再使用python的ctypes调用即可. <test.cpp 生成动态库的源文件> #include <stdio.h> extern "C" { void display() { printf("This is Display Function\n"); } } g++ test.cpp -fPIC -shared 

关于C51与汇编的实用混合编程

最近研究了下51的混合编程,总结一下吧! 1.生成C51的汇编源码 右键单击项目文件,在弹出的opinion for file ....选择上生成SRC文件,这个可以产生汇编源文件,也能允许在C51中嵌入A51,即汇编代码,另外不知为何在项目中若嵌入汇编需添加keil的C51S.LIB,否则下载到单片机后无法正常运行,至于具体原因,现在还不是很明白. 2.查看SRC汇编文件 在项目文件中可以找到SRC文件,可查看所写的C51代码翻译成汇编后的代码,截取部分如图所示,由于编译器在编译C文件时会加入

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

原文:[原创]Matlab与.NET基于类型安全的接口混合编程入门 如果这些文章对你有用,有帮助,期待更多开源组件介绍,请不要吝啬手中的鼠标. [原创分享]Matlab.NET混编调用Figure窗体 http://www.cnblogs.com/asxinyu/archive/2013/04/14/3020813.html [原创]开源.NET下的XML数据库介绍及入门  http://www.cnblogs.com/asxinyu/archive/2013/03/25/2980086.htm

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

本文为原创,如有转载,请注明出处:http://www.cnblogs.com/jackybu 前言 章节: 1.需求描述以及c/c++实现日期和月历的基本操作 2.ios实现自绘日期选择控件 3.android实现自绘日期选择控件 目的: 通过一个相对复杂的自定义自绘控件来分享: 1.ios以及android自定义自绘控件的开发流程 2.objc与c/c++混合编程 3.android ndk的环境配置,android studio ndk的编译模式,swig在android ndk开发中的作

解决linux系统下python中的matplotlib模块内的pyplot输出图片不能显示中文的问题

问题: 我在ubuntu14.04下用python中的matplotlib模块内的pyplot输出图片不能显示中文,怎么解决呢? 解决: 1.指定默认编码为UTF-8: 在python代码开头加入如下代码 import sys reload(sys) sys.setdefaultencoding('utf-8') 2.确认你ubuntu系统环境下拥有的中文字体文件: 在终端运行命令"fc-list :lang=zh",得到自己系统的中文字体 命令输出如下: /usr/share/fon

5种语言混合编程:C++、JS、python、Lisp、汇编

/* 混合C++.JS.python.Lisp.汇编 1种语言,5种语法 */ main { //C++ vector<int> v; v.push(2); putsl(v.size()); if(v.count()==1) { putsl("abc"); } //JS var a=function(x){ return x*2; } putsl(a(3)); a={90,91}; putsl(a[1]); //python b=2 if b==2 putsl 1 puts

很好的c++和Python混合编程文章

c++中嵌入python入门1 本人是用vc2003+python2.5学习的,其它的也应该差不了多少 0. 坏境设置把Python的include/libs目录分别加到vc的include/lib directories中去.另外,由于python没有提供debug lib,体地说,就是没有提供python25_d.lib了.你可以自己编译python的源代码来得到python25_d.lib的,偶还没试过,呵呵.而且网上找了一下也没下载到.所以,如果你想要在debug下运行程序的话,你要把p

(转)python下很帅气的爬虫包 - Beautiful Soup 示例

官方文档地址:http://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html Beautiful Soup 相比其他的html解析有个非常重要的优势.html会被拆解为对象处理.全篇转化为字典和数组. 相比正则解析的爬虫,省略了学习正则的高成本. 相比xpath爬虫的解析,同样节约学习时间成本.虽然xpath已经简单点了.(爬虫框架Scrapy就是使用xpath) 安装 linux下可以执行 [plain] view plai