最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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ō)明,小寫的x,y,z表示一維數(shù)組;大寫的X,Y,Z表示二維數(shù)組,也就是矩陣;×表示這種繪圖函數(shù)不支持這種坐標(biāo),或者不建議在這種坐標(biāo)中繪圖。

函數(shù)類別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那邊的代碼還沒有改。

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]!=""}
# 繪圖類型和維度
# 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)文章

  • Python搭建APNS蘋果推送通知推送服務(wù)的相關(guān)模塊使用指南

    Python搭建APNS蘋果推送通知推送服務(wù)的相關(guān)模塊使用指南

    這里總結(jié)了一份Python搭建蘋果推送通知推送服務(wù)的相關(guān)模塊使用指南,包括PyAPNs、基于twisted框架的pyapns以及apns-client三個(gè)模塊的介紹,需要的朋友可以參考下
    2016-06-06
  • Python api構(gòu)建tensorrt加速模型的步驟詳解

    Python api構(gòu)建tensorrt加速模型的步驟詳解

    小編個(gè)人認(rèn)為python比c++更容易讀并且已經(jīng)有很多包裝很好的科學(xué)運(yùn)算庫(kù)(numpy,scikit等),今天通過本文給大家分享Python api構(gòu)建tensorrt加速模型的步驟,感興趣的朋友一起看看吧
    2021-09-09
  • Python基礎(chǔ)文件操作方法超詳細(xì)講解(詳解版)

    Python基礎(chǔ)文件操作方法超詳細(xì)講解(詳解版)

    文件就是操作系統(tǒng)為用戶或應(yīng)用程序提供的一個(gè)讀寫硬盤的虛擬單位,文件的核心操作就是讀和寫,這篇文章主要介紹了Python基礎(chǔ)文件操作方法超詳細(xì)講解的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-04-04
  • 一文詳細(xì)介紹PyQt5 QPushButton() 的作用

    一文詳細(xì)介紹PyQt5 QPushButton() 的作用

    通過本文的介紹,相信你已經(jīng)對(duì)PyQt5中的QPushButton控件有了深入的了解,從基礎(chǔ)介紹到常用屬性和方法,再到應(yīng)用場(chǎng)景和樣式定制,本文為你提供了全面的指南,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • 如何用用Python制作NFT區(qū)塊鏈作品

    如何用用Python制作NFT區(qū)塊鏈作品

    在本文中,我們將學(xué)習(xí)如何使用 Brownie、Python 和 Chainlink 來(lái)制作非同質(zhì)化的 NFT 作品,并在 OpenSea NFT 市場(chǎng)上展示和銷售我們的成果。
    2021-06-06
  • python列表推導(dǎo)式實(shí)現(xiàn)找出列表中長(zhǎng)度大于5的名字

    python列表推導(dǎo)式實(shí)現(xiàn)找出列表中長(zhǎng)度大于5的名字

    這篇文章主要介紹了python列表推導(dǎo)式實(shí)現(xiàn)找出列表中長(zhǎng)度大于5的名字,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Python?yaml格式配置文件操作實(shí)戰(zhàn)教程

    Python?yaml格式配置文件操作實(shí)戰(zhàn)教程

    yaml是專門用來(lái)寫配置文件的語(yǔ)言,非常簡(jiǎn)潔和強(qiáng)大,用ini也能寫配置文件,看了yaml后,發(fā)現(xiàn)這個(gè)更直觀,更方便,有點(diǎn)類似于json格式,這篇文章主要介紹了Python?yaml格式配置文件操作的相關(guān)資料,需要的朋友可以參考下
    2025-11-11
  • Pygame游戲開發(fā)之太空射擊實(shí)戰(zhàn)盾牌篇

    Pygame游戲開發(fā)之太空射擊實(shí)戰(zhàn)盾牌篇

    相信大多數(shù)8090后都玩過太空射擊游戲,在過去游戲不多的年代太空射擊自然屬于經(jīng)典好玩的一款了,今天我們來(lái)自己動(dòng)手實(shí)現(xiàn)它,在編寫學(xué)習(xí)中回顧過往展望未來(lái),在本課中,我們將為玩家添加一個(gè)盾牌以及一個(gè)用于顯示盾牌等級(jí)的欄
    2022-08-08
  • pymysql 開啟調(diào)試模式的實(shí)現(xiàn)

    pymysql 開啟調(diào)試模式的實(shí)現(xiàn)

    這篇文章主要介紹了pymysql 開啟調(diào)試模式的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Python實(shí)現(xiàn)動(dòng)態(tài)生成系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)到Word文檔

    Python實(shí)現(xiàn)動(dòng)態(tài)生成系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)到Word文檔

    這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)填寫相關(guān)數(shù)據(jù)庫(kù)信息后,生成系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)到word文檔,文中示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-06-06

最新評(píng)論

塔河县| 庆安县| 嘉禾县| 阿瓦提县| 商都县| 亳州市| 孝感市| 名山县| 东源县| 贵港市| 恩施市| 五河县| 灵丘县| 陇西县| 岑巩县| 封开县| 九江县| 永丰县| 宁河县| 金堂县| 大丰市| 中超| 米易县| 珲春市| 博湖县| 云梦县| 东城区| 合山市| 尉氏县| 盱眙县| 华池县| 高安市| 长阳| 娄底市| 敖汉旗| 大英县| 开封县| 新乐市| 仁寿县| 含山县| 忻城县|