wxpython中文教程之wxpython制图方法

发布时间:2019-09-13编辑:脚本学堂
有关wxpython制图的方法,wxPython 简单图表绘制库,可以实现缩放、图例以及网格特性等,wxpython中文教程之绘图制图方法,需要的朋友参考下。

wxpython 有一个简单的图表绘制库. 具有缩放、图例以及网格特性.

专题:wxpython中文教程

可用的报表 (graph) 有:
分布scatter
曲线line
柱状图bar
[more…]我们必须安装 Numeric 库(python-numm). 其它一些图标绘制库有 Gnuplot (python-gnuplot) 或者 MatPlotLib (python-matplotlib) 等,都必须独立安装才能用.

要创建出一个图表,有以下几步:
1. 定义数据
将数据插入到一个元组清单中去. 每个元组有两个项目.
data = [(x1, y1), (x2, y2), (x3, y3),
 (x4, y4), (x5, y5), (x6, y6)]

2. 创建处一个绘制画布
要创建出一个 PlotCanvas 对象,作为框架(frame)的子对象.
 

frame = wx.Frame(self, -1)
client = wx.lib.plot.PlotCanvas(frame)

3. 创建处图形
这里有两个类:PolyLine 以及 PolyMarker. PolyLine 类定义曲线图形. 它的构建器是:
PolyLine(list data, wx.Colour colour, integer width,
 integer style, string legend)
参数“data”就是要显示的数据. “colour”定义线条的颜色. “width”用于绘制图形的笔触大小. “style”参数可能是wx.Pen样式. “legend”是线条的图例.
PolyMarker 可用于创建分布图表和柱状图,它的构建器为:
PolyMarker(list data, wx.Colour colour, integer size,
  wx.Colour fillcolour, integer fillstyle,
  string markershape, string legend)
“fillstyle”也是用于指定 wx.Pen 样式.

标记(marker)形状有:
circle
dot
square
triangle
triangle_down
cross
plus

4. 创建一个图形容器
图形容器是一个用来装入一个图形对象及其标题与标签的容器.
PlotGraphics(list objects, string title, string xLabel,
  string yLabel)
“objects”是由一个或多个图形对象组成的清单
“title”位于图形顶部的标题
“xLabel” – 显示在x轴上的标签
“yLabel” – 显示在y轴上的标签

5. 绘制该图形
绘出该图形.
 

client.Draw(gc, xAxis=(0, 15), yAxis=(0, 15))

“gc”是一个图形容器对象. “xAxis”及“yAxis”定义了坐标轴的范围.
 

#!/usr/bin/python
#coding=utf-8

#plot.py

import wx
import wx.lib.plot as plot

class Plot(wx.Dialog):
    def __init__(self, parent, id, title):
        wx.Dialog.__init__(self, parent, id, title, size=(180, 280))
       
        self.data = [(1, 2), (2, 3), (3, 5), (4, 6), (5, 8), (6, 8),
                     (10, 10)]
        btn1 = wx.Button(self, 1, "分 布", (50, 50))
        btn1 = wx.Button(self, 2, "曲 线", (50, 90))
        btn1 = wx.Button(self, 3, "柱状图", (50, 130))
        btn1 = wx.Button(self, 4, "退 出", (50, 170))
        wx.EVT_BUTTON(self, 1, self.OnScatter)
        wx.EVT_BUTTON(self, 2, self.OnLine)
        wx.EVT_BUTTON(self, 3, self.OnBar)
        wx.EVT_BUTTON(self, 4, self.OnQuit)
        wx.EVT_CLOSE(self, self.OnQuit)
       
    def OnScatter(self, event):
        frm = wx.Frame(self, -1, '分 布', size=(600, 450))
        client = plot.PlotCanvas(frm)
        markers = plot.PolyMarker(self.data, marker='triangle_down',
                                  colour='pink')
        gc = plot.PlotGraphics([markers], '分布图', 'X 轴', 'Y 轴')
        client.Draw(gc, (0, 15), (0, 15))
        frm.Show(True)

    def OnLine(self, event):
        frm = wx.Frame(self, -1, '曲 线', size=(600, 450))
        client = plot.PlotCanvas(frm)
        line = plot.PolyLine(self.data, colour='pink', width=5,
                             legend='数值')
        gc = plot.PlotGraphics([line], '曲线图', 'X 轴', 'Y 轴')
        client.Draw(gc, (0, 15), (0, 15))
        frm.Show(True)

    def OnBar(self, event):
        frm = wx.Frame(self, -1, '柱状图', size=(600, 450))
        client = plot.PlotCanvas(frm)
        bar1 = plot.PolyLine([(1, 0), (1, 5)], legend='', colour='gray',
                             width=25)
        bar2 = plot.PolyLine([(3, 0), (3, 8)], legend='', colour='gray',
                             width=25)
        bar3 = plot.PolyLine([(5, 0), (5, 12)], legend='', colour='gray',
                             width=25)
        bar4 = plot.PolyLine([(6, 0), (6, 2)], legend='', colour='gray',
                             width=25)
        gc = plot.PlotGraphics([bar1, bar2, bar3, bar4], '柱状图', 'X 轴',
                               'Y 轴')
        client.Draw(gc, (0, 15), (0, 15))
        frm.Show(True)
       
    def OnQuit(self, event):
        self.Destroy()       
       
class MyApp(wx.App):
    def OnInit(self):
        dlg = Plot(None, -1, 'plot.py')
        dlg.Show(True)
        dlg.Center()
        return True
       
app = MyApp(0)
app.MainLoop()

如图:

wxpython制图方法1

 

wxpython制图方法2

 

wxpython制图方法3

图:分布、曲线和柱状图scatter, line, bar graphs