pandas 数据可视化之折线图

官网地址:https://openpyxl.readthedocs.io/en/stable/charts/line.html#id1

openpyxl+pandas

# coding=utf-8
import pandas as pd
import time
from openpyxl import Workbook
from openpyxl.chart import (
    LineChart,
    Reference,
)
from openpyxl.chart.axis import DateAxis


def cpu_info(csv_path="./datas-permon/CPU_20200111005156.csv"):
    df = pd.read_csv(csv_path)    #dtype={‘timeStamp‘:str}
    df[‘timeStamp‘] = df[‘timeStamp‘].apply(lambda x:time.strftime(‘%Y%m%d%H%M%S‘
                                                                   ,time.localtime(int(str(x)[:10]))))
    user=df.loc[df.label=="192.168.110.151 CPU user"][["label","timeStamp","elapsed"]]
    iowait=df.loc[df.label=="192.168.110.151 CPU iowait"][["label","timeStamp","elapsed"]]
    idle=df.loc[df.label=="192.168.110.151 CPU idle"][["label","timeStamp","elapsed"]]
    it=df["timeStamp"].drop_duplicates().values.tolist()
    t=[ str(i) for i in it]
    u=user["elapsed"].values.tolist()
    io=iowait["elapsed"].values.tolist()
    idl=idle["elapsed"].values.tolist()
    rows=list(zip(t,u,io,idl))
    rows.insert(0,["timeStamp","user","iowait","idle"])
    return rows


def mem_info(csv_path="./datas-permon/Meminfo_20200111005156.csv"):
    df=pd.read_csv(csv_path)
    df[‘timeStamp‘] = df[‘timeStamp‘].apply(lambda x:time.strftime(‘%Y%m%d%H%M%S‘
                                                                   ,time.localtime(int(str(x)[:10]))))
    total=df.loc[df.label=="192.168.110.151 Memory total"][["label","timeStamp","elapsed"]]
    used=df.loc[df.label=="192.168.110.151 Memory used"][["label","timeStamp","elapsed"]]
    free=df.loc[df.label=="192.168.110.151 Memory free"][["label","timeStamp","elapsed"]]
    tol=total["elapsed"]/1024/1024/1024
    us=used["elapsed"]/1024/1024/1024
    fr=free["elapsed"]/1024/1024/1024
    it = df["timeStamp"].drop_duplicates().values.tolist()
    t = [str(i) for i in it]
    to=tol.values.tolist()
    f=fr.values.tolist()
    u=us.values.tolist()
    rows=list(zip(t,to,u,f))
    rows.insert(0,["timestamp","total","used","free"])
    return rows


def network_info(csv_path="./datas-permon/NetIO_20200111005156.csv"):
    df=pd.read_csv(csv_path)
    df[‘timeStamp‘] = df[‘timeStamp‘].apply(lambda x:time.strftime(‘%Y%m%d%H%M%S‘
                                                                   ,time.localtime(int(str(x)[:10]))))
    send=df.loc[df.label=="192.168.110.151 Network I/O bytessent"][["label","timeStamp","elapsed"]]
    recv=df.loc[df.label=="192.168.110.151 Network I/O bytesrecv"][["label","timeStamp","elapsed"]]
    elapsed_send=send["elapsed"].values.tolist()
    elapsed_recv=recv["elapsed"].values.tolist()
    it = df["timeStamp"].drop_duplicates().values.tolist()
    t = [str(i) for i in it]
    rows=list(zip(t,elapsed_send,elapsed_recv))
    rows.insert(0,["timeStamp","sentBytes","recvBytes"])
    return rows


def performance_util(configurations):
    wb = Workbook()
    for configuration in configurations:
        rows = configuration["rows"]
        sheet = configuration["sheet_name"]
        label_max=configuration["label"]
        ws = wb.create_sheet(sheet, index=configuration["index"])
        for row in rows:
            ws.append(row)
        data = Reference(ws, min_col=2, min_row=1, max_col=label_max, max_row=len(rows)-1) # max_row=7
        # Chart with date axis
        c2 = LineChart()
        c2.title = "Date Axis"
        c2.style = 7
        c2.y_axis.title = "Size"
        c2.y_axis.crossAx = 500
        c2.x_axis = DateAxis(crossAx=100)
        c2.x_axis.number_format = ‘%Y%m%d%H%M%S‘
        # c2.x_axis.majorTimeUnit = "days"
        c2.x_axis.title = "Date"
        c2.height = 16
        c2.width = 28
        c2.add_data(data, titles_from_data=True)
        dates = Reference(ws, min_col=1, min_row=2, max_row=len(rows)-1) # max_row=7
        c2.set_categories(dates)
        ws.add_chart(c2, "F1")
    wb.save("line_permon.xlsx")


if __name__ == ‘__main__‘:
    cpu_dict={"rows":cpu_info(),"sheet_name":"CPU","index":0,"label":4}
    mem_dict={"rows":mem_info(),"sheet_name":"Mem","index":1,"label":4}
    network_dict = {"rows": network_info(), "sheet_name": "NetWork", "index": 2,"label":3}
    performance_util([cpu_dict,mem_dict,network_dict])
    # network_info()

效果图:

pandas 数据可视化之折线图

 mem:

pandas 数据可视化之折线图

network:

pandas 数据可视化之折线图