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

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

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

常用繪圖函數(shù)

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

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

函數(shù)類(lèi)別2Dpolar3D備注
imshow圖像X××
pcolormesh偽彩圖[X,Y,]ZX,Y,Z×
plot曲線圖x[,y]x[,y]x,y[,z]
scatter散點(diǎn)圖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×

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

單選框的更改邏輯

完成這個(gè)功能的改動(dòng),只需先更改cbTypeChanged,再更改cbProjNone, cbProjPolar以及cbProj3d這三個(gè)函數(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)

接下來(lái)是設(shè)置projection的函數(shù),之前我們一直把plot取名為點(diǎn)線圖,這個(gè)先留著,但不妨礙把曲線圖作為另一個(gè)名字加上去,但“點(diǎn)線圖”這個(gè)名字暫時(shí)還不能刪,因?yàn)镈rawSystem那邊的代碼還沒(méi)有改。

def cbProjNone(self, t):
    if t in ("點(diǎn)線圖", "曲線圖"):
        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 ("點(diǎn)線圖", "曲線圖"):
        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')

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

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

修改后的結(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",
            "點(diǎn)型" : "marker"   , "點(diǎn)徑" : "markersize", "點(diǎn)色" : "markeredgecolor",
            "標(biāo)簽" : "label"    , "透明度"    : "alpha", "層號(hào)" : "zorder" 
        }
        self.STR_KEYS = ["標(biāo)簽"]
        self.COM_KEYS = ["線型", "點(diǎn)型"]
        self.NUM_KEYS = ["線寬", "點(diǎn)徑", "透明度"]
        self.INT_KEYS = ["層號(hào)"]
        self.CLR_KEYS = ["線色", "點(diǎn)色"]
    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(["標(biāo)簽", "層號(hào)", "透明度"]):
            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 = {
            "點(diǎn)型" : ['.', ',', '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]!=""}
# 繪圖類(lèi)型和維度
# varDct 的格式是 {"sub":sub, "type":slctType, "dim":dim, "proj": proj}
class DrawType(ttk.Frame):
    # ws為兩個(gè)combobox的寬
    def __init__(self, master, 
        varDct = {"sub":"111", "type":'點(diǎn)線圖', "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 = [
            "點(diǎn)線圖", "曲線圖", "散點(diǎn)圖", "圖像", "偽彩圖", 
            "條形圖", "橫向條形圖", "莖葉圖", "階梯圖"]
    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 ("點(diǎn)線圖", "曲線圖"):
            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 ("點(diǎn)線圖", "曲線圖"):
            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個(gè)繪圖函數(shù)使用詳解的詳細(xì)內(nèi)容,更多關(guān)于python繪圖函數(shù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • JMETER如何隨機(jī)請(qǐng)求參數(shù)

    JMETER如何隨機(jī)請(qǐng)求參數(shù)

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

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

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

    NumPy 數(shù)組使用大全

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

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

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

    Python?numpy邏輯運(yùn)算方法舉例介紹

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

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

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

    python機(jī)器學(xué)習(xí)pytorch?張量基礎(chǔ)教程

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

    對(duì)django中foreignkey的簡(jiǎn)單使用詳解

    今天小編就為大家分享一篇對(duì)django中foreignkey的簡(jiǎn)單使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07
  • pycharm新建一個(gè)python工程步驟

    pycharm新建一個(gè)python工程步驟

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

    Python和Sublime整合過(guò)程圖示

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

最新評(píng)論