欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中常用的8個繪圖函數(shù)使用詳解

 更新時間:2023年10月05日 10:16:36   作者:微小冷  
這篇文章主要為大家詳細介紹了Python中常用的8個繪圖函數(shù)的使用,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的小伙伴可以跟隨小編一起了解一下

常用繪圖函數(shù)

目前只集成了三種繪圖函數(shù),即plot, scatter和bar,這個體量不到matplotlib提供的繪圖函數(shù)的十分之一,接下來要做的自然是擴充繪圖函數(shù)庫。

但一次性也不宜擴充太多,下面列出一些常用的繪圖函數(shù),如無說明,小寫的x,y,z表示一維數(shù)組;大寫的X,Y,Z表示二維數(shù)組,也就是矩陣;×表示這種繪圖函數(shù)不支持這種坐標,或者不建議在這種坐標中繪圖。

函數(shù)類別2Dpolar3D備注
imshow圖像X××
pcolormesh偽彩圖[X,Y,]ZX,Y,Z×
plot曲線圖x[,y]x[,y]x,y[,z]
scatter散點圖x,y/X,Yx,yx,y,[,z]可為任意維度
stem莖葉圖x,yx,yx,y[,z]
step階梯圖x,yx,yx,y[,z]
bar條形圖x,yx,yx,y[,z]
barh橫向條形圖x,yx,y×

從這個圖可以看出,2D坐標中,大部分函數(shù)只支持兩個變量,極坐標亦然,而3D坐標中要么不支持繪圖,要么支持x,y或者x,y,z三種繪圖坐標。

單選框的更改邏輯

完成這個功能的改動,只需先更改cbTypeChanged,再更改cbProjNone, cbProjPolar以及cbProj3d這三個函數(shù)就可以了。

def cbTypeChanged(self, evt):
    t = self.drawVars['type'].get()
    p = self.drawVars['proj'].get()
    if t in ("圖像"):
        self.wDct['proj']['value'] =  ("None")
    elif t in ("橫向條形圖", "偽彩圖"):
        self.wDct['proj']['value'] =  ("None", "polar")
    else:
        self.wDct['proj']['value'] =  ("None", "3d", "polar")
    projs = self.wDct['proj']['value']
    if p not in projs:
        self.drawVars['proj'].set(projs[0])        
    self.cbProjChanged(None)

接下來是設(shè)置projection的函數(shù),之前我們一直把plot取名為點線圖,這個先留著,但不妨礙把曲線圖作為另一個名字加上去,但“點線圖”這個名字暫時還不能刪,因為DrawSystem那邊的代碼還沒有改。

def cbProjNone(self, t):
    if t in ("點線圖", "曲線圖"):
        self.wDct['dim']['value'] = ('x', 'xy')
    elif t in ("圖像"):
        self.wDct['dim']['value'] = ('x')
    elif t in ("偽彩圖"):
        self.wDct['dim']['value'] = ('x', 'xyz')
    else:
        self.wDct['dim']['value'] = ('xy')
def cbProjPolar(self, t):
    if t in ("點線圖", "曲線圖"):
        self.wDct['dim']['value'] = ('x', 'xy')
    elif t in ("偽彩圖"):
        self.wDct['dim']['value'] = ('xyz')
    else:
        self.wDct['dim']['value'] = ('xy')
def cbProj3d(self, t):
    self.wDct['dim']['value'] = ('xy', 'xyz')

最后,新建一個全局的常量,用于存儲函數(shù)名,并在創(chuàng)建slctDct字典時調(diào)用。

def initConst(self):
    self.TYPES = [
        "點線圖", "曲線圖", "散點圖", "圖像", "偽彩圖", 
        "條形圖", "橫向條形圖", "莖葉圖", "階梯圖"]

修改后的結(jié)果如圖所示

源代碼

下面給出base.py的源代碼。

import numpy as np
import tkinter as tk
import tkinter.ttk as ttk
class DrawStyle(ttk.Frame):
    def __init__(self, master, 
        varDct={}, ws=None, func=None, **options):
        super().__init__(master, **options)
        self.pack()
        self.initConst()
        self.initVars()
        self.initWidgets()
    def initConst(self):
        self.VAR_LABS = {
            "線型" : "linestyle", "線寬" : "linewidth",  "線色" : "color",
            "點型" : "marker"   , "點徑" : "markersize", "點色" : "markeredgecolor",
            "標簽" : "label"    , "透明度"    : "alpha", "層號" : "zorder" 
        }
        self.STR_KEYS = ["標簽"]
        self.COM_KEYS = ["線型", "點型"]
        self.NUM_KEYS = ["線寬", "點徑", "透明度"]
        self.INT_KEYS = ["層號"]
        self.CLR_KEYS = ["線色", "點色"]
    def initVars(self):
        self.varDct = {key:tk.StringVar() for key in self.VAR_LABS}
    def newFrame(self):
        frm = ttk.Frame(self)
        frm.pack(side=tk.TOP, fill=tk.X)
        return frm
    def initWidgets(self):
        frm = self.newFrame()
        for i,key in enumerate(["標簽", "層號", "透明度"]):
            tk.Label(frm, text=key).grid(row=0, column=i*2, padx=2)
            tmp = ttk.Entry(frm, width=10, textvariable=self.varDct[key])
            tmp.grid(row=0, column=i*2+1, padx=2, pady=2)
        self.initLineMarker(frm)
    def initLineMarker(self, frm):
        enumDct = {
            "點型" : ['.', ',', '1', '2', '3', '4', '+', 'x', '|', '_', 
                0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 
                'o', 'v', '^', '<', '>', '8', 's', 'p', '*', 
                'h', 'H', 'D', 'd', 'P', 'X'],
            "線型" : ['-', '--', '-.', ':']
        }
        for i in range(2):
            key = self.COM_KEYS[i]
            ttk.Label(frm, text=key).grid(row=i+1, column=0, padx=2)
            tmp = ttk.Combobox(frm, width=10, textvariable=self.varDct[key])
            tmp.grid(row=i+1, column=1, padx=2, pady=2)
            tmp['value'] = enumDct[key]
            key = self.NUM_KEYS[i]
            ttk.Label(frm, text=key).grid(row=i+1, column=2, padx=2)
            tmp = ttk.Entry(frm, width=10, textvariable=self.varDct[key])
            tmp.grid(row=i+1, column=3, padx=2, pady=2)
            key = self.CLR_KEYS[i]
            ttk.Label(frm, text=key).grid(row=i+1, column=4, padx=2)
            tmp = ttk.Entry(frm, width=10, textvariable=self.varDct[key])
            tmp.grid(row=i+1, column=5, padx=2, pady=2)
    def getOneVar(self, key):
        v = self.varDct[key].get()
        if v=="":
            return ""
        if key in NUM_KEYS:
            return float(v)
        elif key in INT_KEYS:
            return int(v)
        else:
            return v
    def getVarDct(self):
        dct = {self.VAR_LABS[key] : self.varDct[key].get() 
            for key in self.varDct}
        return {key : dct[key] for key in dct if dct[key]!=""}
# 繪圖類型和維度
# varDct 的格式是 {"sub":sub, "type":slctType, "dim":dim, "proj": proj}
class DrawType(ttk.Frame):
    # ws為兩個combobox的寬
    def __init__(self, master, 
        varDct = {"sub":"111", "type":'點線圖', "dim":"xyz", "proj": "3d"},
        ws=None, func=None, **options):
        super().__init__(master, **options)
        self.pack()
        self.dimChanged = func
        self.initConst()
        self.initVar(varDct)
        self.initWidgets(ws)
    def initVar(self, varDct):
        self.drawVars = {key:tk.StringVar() for key in varDct}
        for key in self.drawVars:
            self.drawVars[key].set(varDct[key])
    def initConst(self):
        self.TYPES = [
            "點線圖", "曲線圖", "散點圖", "圖像", "偽彩圖", 
            "條形圖", "橫向條形圖", "莖葉圖", "階梯圖"]
    def initWidgets(self, ws):
        if ws==None: ws = [5, 5, 5, 3]
        slctDct = {'type': self.TYPES, 
            'proj': ("None", "3d", "polar"), 
            'dim' : ("x", "xy", "xyz")}    # 繪圖維度
        keys = ['sub', 'type', 'proj', 'dim']
        self.wDct = {}  # 控件字典
        # 此為設(shè)置子圖的Entry控件
        self.wDct['sub'] = ttk.Entry(self, width=ws[0], 
            textvariable=self.drawVars['sub'])
        for i, key in enumerate(keys[1:], 1):
            self.wDct[key] = ttk.Combobox(self, width=ws[i], 
                textvariable=self.drawVars[key])
            self.wDct[key]['value'] = slctDct[key]
        for key in keys:
            self.wDct[key].pack(side=tk.LEFT, padx=2)
        self.wDct['type'].bind('<<ComboboxSelected>>', self.cbTypeChanged)
        self.wDct['proj'].bind('<<ComboboxSelected>>', self.cbProjChanged)
        self.wDct['dim'].bind('<<ComboboxSelected>>', self.dimChanged)
    def cbTypeChanged(self, evt):
        t = self.drawVars['type'].get()
        p = self.drawVars['proj'].get()
        if t in ("圖像"):
            self.wDct['proj']['value'] =  ("None")
        elif t in ("橫向條形圖", "偽彩圖"):
            self.wDct['proj']['value'] =  ("None", "polar")
        else:
            self.wDct['proj']['value'] =  ("None", "3d", "polar")
        projs = self.wDct['proj']['value']
        if p not in projs:
            self.drawVars['proj'].set(projs[0])        
        self.cbProjChanged(None)
    def cbProjChanged(self, evt):
        p = self.drawVars['proj'].get()
        func = {
            'None': self.cbProjNone,
            '3d': self.cbProj3d,
            'polar' : self.cbProjPolar}
        d = self.wDct['dim'].get()
        t = self.drawVars['type'].get()
        func[p](t)
        dims = self.wDct['dim']['value']
        if d not in dims:
            self.drawVars['dim'].set(dims[0])
        self.dimChanged(None)
    def cbProjNone(self, t):
        if t in ("點線圖", "曲線圖"):
            self.wDct['dim']['value'] = ('x', 'xy')
        elif t in ("圖像"):
            self.wDct['dim']['value'] = ('x')
        elif t in ("偽彩圖"):
            self.wDct['dim']['value'] = ('x', 'xyz')
        else:
            self.wDct['dim']['value'] = ('xy')
    def cbProjPolar(self, t):
        if t in ("點線圖", "曲線圖"):
            self.wDct['dim']['value'] = ('x', 'xy')
        elif t in ("偽彩圖"):
            self.wDct['dim']['value'] = ('xyz')
        else:
            self.wDct['dim']['value'] = ('xy')
    def cbProj3d(self, t):
        self.wDct['dim']['value'] = ('xy', 'xyz')
    def getSub(self):
        return self.drawVars['sub'].get()
    def getType(self): 
        return self.drawVars['type'].get()
    def getDim(self):
        return self.drawVars['dim'].get()
    def getProj(self):
        return self.drawVars['proj'].get()
    def getDct(self):
        return {key:self.drawVars[key].get() for key in self.drawVars}

以上就是Python中常用的8個繪圖函數(shù)使用詳解的詳細內(nèi)容,更多關(guān)于python繪圖函數(shù)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • JMETER如何隨機請求參數(shù)

    JMETER如何隨機請求參數(shù)

    作者分享了在業(yè)務(wù)場景中如何優(yōu)化接口查詢的實踐經(jīng)驗,主要面臨的問題是需要隨機獲取上游查詢接口的結(jié)果,提出了兩種方案,方案一是反復(fù)查詢并隨機獲取查詢結(jié)果;方案二是查詢一次,然后隨機從查詢結(jié)果中獲取,通過實測比較,方案二的性能提升較大
    2024-10-10
  • django配置app中的靜態(tài)文件步驟

    django配置app中的靜態(tài)文件步驟

    這篇文章主要介紹了django配置app中的靜態(tài)文件步驟,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • NumPy 數(shù)組使用大全

    NumPy 數(shù)組使用大全

    這篇文章主要介紹了NumPy 數(shù)組使用大全,在本教程中,你將學習如何在 NumPy 數(shù)組上以多種方式添加、刪除、排序和操作元素。 文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • 詳解Python如何實現(xiàn)惰性導(dǎo)入-lazy import

    詳解Python如何實現(xiàn)惰性導(dǎo)入-lazy import

    如果你的 Python 程序程序有大量的 import,而且啟動非常慢,那么你應(yīng)該嘗試懶導(dǎo)入,本文分享一種實現(xiàn)惰性導(dǎo)入的一種方法,需要的可以參考一下
    2022-10-10
  • Python?numpy邏輯運算方法舉例介紹

    Python?numpy邏輯運算方法舉例介紹

    這篇文章主要介紹了Python?numpy邏輯運算方法的相關(guān)資料,NumPy中提供了一系列邏輯運算方法,用于執(zhí)行逐元素的邏輯和比較操作,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-10-10
  • pyecharts在數(shù)據(jù)可視化中的應(yīng)用詳解

    pyecharts在數(shù)據(jù)可視化中的應(yīng)用詳解

    這篇文章主要介紹了pyecharts在數(shù)據(jù)可視化中的應(yīng)用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06
  • python機器學習pytorch?張量基礎(chǔ)教程

    python機器學習pytorch?張量基礎(chǔ)教程

    這篇文章主要為大家介紹了python機器學習pytorch?張量基礎(chǔ)教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • 對django中foreignkey的簡單使用詳解

    對django中foreignkey的簡單使用詳解

    今天小編就為大家分享一篇對django中foreignkey的簡單使用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • pycharm新建一個python工程步驟

    pycharm新建一個python工程步驟

    在本文里小編給讀者們分享一篇關(guān)于pycharm怎么新建一個python工程的知識點和步驟內(nèi)容,需要的朋友們學習下。
    2019-07-07
  • Python和Sublime整合過程圖示

    Python和Sublime整合過程圖示

    這篇文章主要介紹了Python和Sublime整合過程圖示,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12

最新評論