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

python繪圖demo實現(xiàn)流程介紹

 更新時間:2022年11月10日 10:12:22   作者:Huterox  
這篇文章主要介紹了python繪圖demo實現(xiàn)流程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧

前言

冒個泡泡,好久沒有冒泡泡了,那么今天的話就淺淺水一下博文吧。任務(wù)是這樣的,將Excel當(dāng)中的數(shù)據(jù),把它放到咱們的matlpolitlib里面去畫個圖。

數(shù)據(jù)是這樣子的:

這里面有很多sheet,然后還有對應(yīng)的點(diǎn)的坐標(biāo)。要最終實現(xiàn)的效果就是:

并且我們還需要符合規(guī)范:

這樣的話圖片才不會失真。BOSS不催,小爺不寫(狗頭)

實現(xiàn)

那么這里的話就是咱們的實現(xiàn)了這個Excel的讀取,然后是繪制圖片。

讀取數(shù)據(jù)

首先是讀取數(shù)據(jù),這部分相當(dāng)簡單,就在初始化做了。

    def __init__(self,file_path,pic_name=None,
                 legend_names=None,padx=0,pady=1,
                 save_path_pre="./pic"
                 ):
        """
        默認(rèn)存儲的圖片為4K,600dpi
        :param file_path:
        :param pic_name:
        :param legend_names:
        :param padx:
        :param pady:
        :param save_path_pre:
        """
        self.xl_file = xlrd.open_workbook(file_path)
        self.sheet_names = self.xl_file.sheet_names()
        self.legend_names = None
        self.setTrans = False
        self.setFig = False
        self.join = False
        self.padx = padx
        self.pady = pady
        self.save_path_pre = save_path_pre
        if(pic_name):
            self.pic_name = pic_name
        else:
            self.pic_name = self.sheet_names
        if(legend_names and padx==None):
            self.legend_names=legend_names
        elif(legend_names==None):
            sheet1 = self.xl_file.sheets()[0]
            sheet1_cols = sheet1.col_values(padx)
            self.legend_names = sheet1_cols[pady:]
        elif(legend_names!=None):
            self.legend_names = legend_names
        else:
            raise Exception("請檢查格式,或者參數(shù)設(shè)置")

這里我解釋一下這幾個參數(shù)的含義

    默認(rèn)存儲的圖片為4K,600dpi
    :param file_path:
    :param pic_name:
    :param legend_names: 圖例的名字
    :param padx: 數(shù)據(jù)是從哪一個列開始的
    :param pady: 哪一個行開始的
    :param save_path_pre:
    """

例如剛剛的例子,是在第1行第1列開始的,下標(biāo)0開始。

如果沒有指定那個圖例說明的話,那么代碼就會直接取pady那一列的數(shù)據(jù)作為圖例。

繪圖

這個繪圖的話非常簡單,就是直接使用那個plt,讀取好數(shù)據(jù)就好了。

    def creatPic(self,legend_loc='upper right',multiple=40,
                 padding=10000,width=4096,height=3112
                 ):
        """
        :param legend_loc: 圖例的說明
        :return:
        """
        if(self.setFig and self.setFig):
            for sheet_index in range(len(self.xl_file.sheet_names())):
                sheet = self.xl_file.sheets()[sheet_index]
                self.plt = self.creatFigure()
                #按照行進(jìn)行讀取
                for row in range(self.pady,len(self.legend_names)+self.pady):
                    row_data_y = [self.transform(float(data),padding) for data in sheet.row_values(row)[self.padx+1:]]
                    row_data_x = [x*multiple for x in range(len(row_data_y))]
                    label_name = self.legend_names[row-self.pady]
                    self.plt.plot(row_data_x,row_data_y,label=label_name)
                plt.legend()
                save_path = self.save_path_pre+"./"+self.pic_name[sheet_index]+".jpg"
                self.plt.savefig(save_path,
                                 dpi=600, bbox_inches='tight'
                                 )
                self.changeImgSiz(save_path)
                self.plt.pause(0.05)
        else:
            raise Exception("請先設(shè)置數(shù)據(jù)轉(zhuǎn)換方式以及繪圖")

這里的話還有一點(diǎn)就是有一個修改圖片尺寸的代碼,以為畫布尺寸和那個實際圖片尺寸還是有點(diǎn)區(qū)別的。這個看著改吧,當(dāng)然你可以選擇保存為png,但是這樣的話,x,y軸的說明可能沒有了。那么重新resize的話,dpi會變成96,所以看自己吧

完整實現(xiàn)

import matplotlib.pyplot as plt  # 為方便簡介為plt
import xlrd
import math
from PIL import Image
class Draw(object):
    def __init__(self,file_path,pic_name=None,
                 legend_names=None,padx=0,pady=1,
                 save_path_pre="./pic"
                 ):
        """
        默認(rèn)存儲的圖片為4K,600dpi
        :param file_path:
        :param pic_name:
        :param legend_names:
        :param padx:
        :param pady:
        :param save_path_pre:
        """
        self.xl_file = xlrd.open_workbook(file_path)
        self.sheet_names = self.xl_file.sheet_names()
        self.legend_names = None
        self.setTrans = False
        self.setFig = False
        self.join = False
        self.padx = padx
        self.pady = pady
        self.save_path_pre = save_path_pre
        if(pic_name):
            self.pic_name = pic_name
        else:
            self.pic_name = self.sheet_names
        if(legend_names and padx==None):
            self.legend_names=legend_names
        elif(legend_names==None):
            sheet1 = self.xl_file.sheets()[0]
            sheet1_cols = sheet1.col_values(padx)
            self.legend_names = sheet1_cols[pady:]
        elif(legend_names!=None):
            self.legend_names = legend_names
        else:
            raise Exception("請檢查格式,或者參數(shù)設(shè)置")
    def setTransform(self,joinPoint=None):
        if(joinPoint):
            self.transform = joinPoint
            self.join = True
        else:
            self.transform_core = math.log
        self.setTrans = True
    def transform(self,x,pading=10000):
        if(self.join):
            return self.transform_core(x)
        else:
            return self.transform_core(x+pading)
    def setFigure(self,style='seaborn-whitegrid',fig=None,
                  xlabel='x',ylabel='log(y)'):
        self.fig = fig
        self.style = style
        self.xlabel = xlabel
        self.ylabel = ylabel
        self.setFig = True
    def changeImgSiz(self,path,width=4096,height=4096):
        img_switch = Image.open(path)
        img_deal = img_switch.resize((width,height), Image.ANTIALIAS)
        img_deal.save(path)
    def creatFigure(self):
        self.plt = plt
        if(self.fig):
            self.plt = self.fig()
        else:
            self.plt.rcParams['font.sans-serif'] = ['SimHei']
            self.plt.rcParams['axes.unicode_minus'] = False
            self.plt.figure(figsize=(8, 8))
            self.plt.style.use(self.style)
            self.plt.xlabel(self.xlabel)
            self.plt.ylabel(self.ylabel)
        return self.plt
    def creatPic(self,legend_loc='upper right',multiple=40,
                 padding=10000,width=4096,height=3112
                 ):
        """
        :param legend_loc: 圖例的說明
        :return:
        """
        if(self.setFig and self.setFig):
            for sheet_index in range(len(self.xl_file.sheet_names())):
                sheet = self.xl_file.sheets()[sheet_index]
                self.plt = self.creatFigure()
                #按照行進(jìn)行讀取
                for row in range(self.pady,len(self.legend_names)+self.pady):
                    row_data_y = [self.transform(float(data),padding) for data in sheet.row_values(row)[self.padx+1:]]
                    row_data_x = [x*multiple for x in range(len(row_data_y))]
                    label_name = self.legend_names[row-self.pady]
                    self.plt.plot(row_data_x,row_data_y,label=label_name)
                plt.legend()
                save_path = self.save_path_pre+"./"+self.pic_name[sheet_index]+".jpg"
                self.plt.savefig(save_path,
                                 dpi=600, bbox_inches='tight'
                                 )
                self.changeImgSiz(save_path)
                self.plt.pause(0.05)
        else:
            raise Exception("請先設(shè)置數(shù)據(jù)轉(zhuǎn)換方式以及繪圖")
if __name__ == '__main__':
    file_path = ''
    save_path_pre = ''
    legend_names = ['','','']
    draw = Draw(file_path,legend_names=legend_names,save_path_pre=save_path_pre)
    draw.setTransform()
    draw.setFigure()
    draw.creatPic()
    

到此這篇關(guān)于python繪圖demo實現(xiàn)流程介紹的文章就介紹到這了,更多相關(guān)python繪圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 5款最強(qiáng)且免費(fèi)的Python IDE小結(jié)

    5款最強(qiáng)且免費(fèi)的Python IDE小結(jié)

    開發(fā)工具在日常代碼編寫過程中起著至關(guān)重要的作用,一款優(yōu)秀的開發(fā)工具,不僅可以盡可能的減少你在配置方面耗費(fèi)的精力,本文主要介紹了5種,感興趣的可以了解一下
    2021-07-07
  • PyCharm vs VSCode,作為python開發(fā)者,你更傾向哪種IDE呢?

    PyCharm vs VSCode,作為python開發(fā)者,你更傾向哪種IDE呢?

    這篇文章主要介紹了PyCharm和vscode作為python ide的優(yōu)劣,幫助你選擇適合自己的ide,感興趣的朋友可以了解下
    2020-08-08
  • 淺析Python?WSGI的使用

    淺析Python?WSGI的使用

    WSGI也稱之為web服務(wù)器通用網(wǎng)關(guān)接口,全稱是web?server?gateway?interface。這篇文章主要為大家介紹了Python?WSGI的使用,希望對大家有所幫助
    2023-04-04
  • Python無損音樂搜索引擎實現(xiàn)代碼

    Python無損音樂搜索引擎實現(xiàn)代碼

    這篇文章主要介紹了Python無損音樂搜索引擎的實現(xiàn)代碼,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2018-02-02
  • python中map()函數(shù)使用方法詳解

    python中map()函數(shù)使用方法詳解

    map( )函數(shù)在算法題目里面經(jīng)常出現(xiàn),map( )會根據(jù)提供的函數(shù)對指定序列做映射,在寫返回值等需要轉(zhuǎn)換的時候比較常用。這篇文章主要介紹了Python中 map()的用法,需要的朋友可以參考下
    2021-08-08
  • 20個超實用Python自動化腳本分享

    20個超實用Python自動化腳本分享

    在當(dāng)今的快節(jié)奏工作環(huán)境中,自動化不再是一種奢侈,而是提高效率和精確性的必需手段,這篇文章為大家整理了20個超實用Python自動化腳本,希望對大家有所幫助
    2024-01-01
  • Python?獲取指定開頭指定結(jié)尾所夾中間內(nèi)容(推薦)

    Python?獲取指定開頭指定結(jié)尾所夾中間內(nèi)容(推薦)

    獲取文章中指定開頭、指定結(jié)尾中所夾的內(nèi)容。其中,開頭和結(jié)尾均有多種,但最多也就十幾種,所以代碼還是具有可行性的,今天小編給大家介紹通過Python?獲取指定開頭指定結(jié)尾所夾中間內(nèi)容,感興趣的朋友一起看看吧
    2023-02-02
  • Python教程自己實現(xiàn)軟件加密功能

    Python教程自己實現(xiàn)軟件加密功能

    網(wǎng)上的加密軟件不太安全,但對于日常學(xué)習(xí)而言,我們可以借助異或操作,實現(xiàn)一個簡單的文件加密程序,從而強(qiáng)化自身的編程能力
    2021-09-09
  • Python?標(biāo)準(zhǔn)庫?fileinput與文件迭代器

    Python?標(biāo)準(zhǔn)庫?fileinput與文件迭代器

    這篇文章主要介紹了Python標(biāo)準(zhǔn)庫fileinput與文件迭代器,fileinput模塊可以對一個或多個文件中的內(nèi)容進(jìn)行迭代、遍歷等操作,更多詳細(xì)內(nèi)容需要的朋友可以參考一下
    2022-09-09
  • Python+OpenCV實現(xiàn)車牌字符分割和識別

    Python+OpenCV實現(xiàn)車牌字符分割和識別

    這篇文章主要為大家詳細(xì)介紹了Python+OpenCV實現(xiàn)車牌字符分割和識別,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03

最新評論

南康市| 六安市| 旺苍县| 滦平县| 贡觉县| 巴彦淖尔市| 益阳市| 阜新市| 汝阳县| 肃南| 象州县| 永泰县| 新疆| 民和| 临清市| 宁晋县| 古蔺县| 河东区| 汪清县| 茌平县| 广宁县| 庆城县| 沁源县| 肇源县| 民乐县| 普格县| 比如县| 涪陵区| 太保市| 浪卡子县| 尖扎县| 丰原市| 临夏县| 藁城市| 时尚| 清河县| 达州市| 湾仔区| 洞口县| 永安市| 西和县|