python3 讀取txt文件數據,繪制趨勢圖,matplotlib模塊


python3 讀取txt文件數據,繪制趨勢圖

test1.txt內容如下:

時間/min cpu使用率/% 內存使用率/%
01/12-17:06 0.01 7.61
01/12-17:07 0.03 7.61
01/12-17:08 0.3 7.61
01/12-17:09 0.7 7.61
01/12-17:10 0.1 7.61

 

腳本如下:

import matplotlib.pyplot as plt
from itertools import islice
import os
a = []
b = []
c = []
with open(r'D:\result\test1.txt',mode='r',encoding='utf-8') as f:            #以只讀方式打開txt文本文件
    for lines in islice(f,1,None):            #去掉首行,讀取所有行
        lines=lines.rstrip("\n")              #去掉讀取出來的換行符
        lines1=lines.split(" ")[0]            #以空格為分割,獲取第1個值
        lines2=lines.split(" ")[1]            #以空格為分割,獲取第2個值
        lines3=lines.split(" ")[2]            #以空格為分割,獲取第2個值
        a.append(lines1)                      #將值追加至a列表
        b.append(float(lines2))               #將值追加至b列表,並將列表的str類型轉換為float
        c.append(float(lines3))               #將值追加至c列表,並將列表的str類型轉換為float
    ax1 = plt.subplot(211)  # 創建子圖 ax1
    ax2 = plt.subplot(212)  # 創建子圖 ax2
    plt.sca(ax1)            # 選擇子圖ax1
    plt.tight_layout()      # 設置子圖之間默認的間距
    #設置x,y軸
    plt.plot(a,b)
    #設置x軸顯示間隔(假如x軸數據較多,x軸顯示重疊,我們可以控制x軸的顯示間隔)
    plt.xticks(range(0,4,2))
    #給圖標指定標題
    plt.title("CPU",fontsize=24)
    #為X軸設置標題
    plt.xlabel("Time/m",fontsize=14)
    #為Y軸設置標題
    plt.ylabel("CPU/%",fontsize=14)
    #設置刻度標記大小,rotation表示刻度值傾斜角度
    plt.xticks(a,rotation=60,color='blue')
    plt.sca(ax2)     # 選擇子圖ax2
    plt.plot(a, c)   # 在子圖ax2 中繪制
    #展示所有圖表
    plt.show()

效果圖如下:

 

繪圖參考:

https://blog.csdn.net/u010021014/article/details/110393223?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-3&spm=1001.2101.3001.4242

 https://blog.csdn.net/u014453898/article/details/73395522

https://www.cnblogs.com/zhizhan/p/5615947.html

 

新增鼠標移動標注

import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import os
from itertools import islice
from matplotlib import font_manager as fm, rcParams
plt.rcParams['font.sans-serif']=['SimHei'] #顯示中文標簽
plt.rcParams['axes.unicode_minus']=False   #這兩行需要手動設置

a = []
b = []
# fig = plt.figure()
# po_annotation = []
with open(r'D:\result\biaogancloud.txt',mode='r',encoding='utf-8') as f:
    for lines in islice(f,1,None):
        lines=lines.rstrip("\n")
        # print(lines.split(" ")[1])
        lines1=lines.split(" ")[0]
        lines2=lines.split(" ")[1]
        a.append(lines1)
        b.append(float(lines2))

# ---------- 畫圖 ----------
fig, ax = plt.subplots()

# 網格顯示
ax.grid(color='b' , linewidth='0.3' ,linestyle='-.')
#折線圖
ax.plot(a, b, color='royalblue', lw=2.5, label='data')
# 折線圖上的散點
ax.scatter(a, b, marker='o', c='darkgreen')
ax.scatter(a, b, marker='o', c='firebrick')

# 一些小設置
# 設置 x 軸顯示密度
# tick_spacing = 8
# ax.xaxis.set_major_locator(ticker.MultipleLocator(tick_spacing))
# 設置 x 坐標軸標簽的顯示內容和大小
plt.xlabel('時間', fontsize=16)
# 設置 x 坐標軸刻度的旋轉方向和大小
plt.xticks(rotation=90, fontsize=16)
# 設置 y 坐標軸刻度大小
plt.yticks(fontsize=18)
# 坐標軸中文顯示
plt.rcParams['font.sans-serif'] = ['SimHei']
# 調整圖的位置
plt.subplots_adjust(top=0.9, bottom=0.22)
# 設置尺寸
fig.set_size_inches(24, 12)

po_annotation1 = []
for i in range(len(a)):
    # 標注點的坐標
    point_x = a[i]
    point_y = b[i]
    point, = plt.plot(point_x, point_y, 'o', c='darkgreen')
    # 標注框偏移量
    offset1 = 10
    offset2 = 10
    # 標注框
    bbox1 = dict(boxstyle="round", fc='lightgreen', alpha=0.6)
    # 標注箭頭
    arrowprops1 = dict(arrowstyle="->", connectionstyle="arc3,rad=0.")
    # 標注
    annotation = plt.annotate(text=(a[i],b[i]), xy=(a[i], b[i]), xytext=(-offset1, offset2), textcoords='offset points',
                              bbox=bbox1, arrowprops=arrowprops1, size=15)
    # 默認鼠標未指向時不顯示標注信息
    annotation.set_visible(False)
    po_annotation1.append([point, annotation])

# 定義鼠標響應函數
def on_move(event):
    visibility_changed = False
    for point, annotation in po_annotation1:
        should_be_visible = (point.contains(event)[0] == True)

        if should_be_visible != annotation.get_visible():
            visibility_changed = True
            annotation.set_visible(should_be_visible)

    if visibility_changed:
        plt.draw()

# 鼠標移動事件
on_move_id = fig.canvas.mpl_connect('motion_notify_event', on_move)
plt.show()

 

參考:https://blog.csdn.net/bz_xyz/article/details/108257194


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM