簡體   English   中英

在Ubuntu中使用Python中的matplotlib從csv文件繪制2D圖形

[英]Plot a 2D graph from a csv file using matplotlib in Python in ubuntu

我必須使用python將csv文件中的值繪制到圖形中。 我在python中使用以下代碼。 碼:

import numpy as np
import matplotlib.pyplot as plt

def graph():
    cv,dv = np.loadtxt('/home/test/test_mat.csv',delimiter=',',unpack=True)

    fig = plt.figure()
    ax1 = fig.add_subplot(1,1,1,axisbg='white')
    plt.plot(x=cv,y=dv)
    plt.title('Chemical Presence')
    plt.ylabel('dv')
    plt.xlabel('cv')
    plt.show()

graph()

在代碼中,我試圖從存在的位置加載csv文件。 數據文件看起來像此處數據文件所附的屏幕截圖。 這里col 1 = CV(X軸),而row1 = DV(Y軸)。

CV\Line        1            2           3           4           5
-7.49952    7.6904296   7.64923087  7.81402579  7.59429923  7.73162833
-7.48388    7.56683341  7.51190177  7.38830558  7.67669669  7.38830558
-7.46824    7.03124992  7.38830558  7.49816886  7.51190177  7.66296378
-7.4526     7.53936759  7.66296378  7.71789542  7.62176505  7.6904296
-7.43696    7.49816886  7.73162833  7.45697013  7.71789542  7.38830558
-7.42132    7.01751701  7.20977775  7.48443595  7.58056632  7.81402579
-7.40568    7.58056632  7.71789542  7.70416251  7.49816886  7.58056632

但是我在執行代碼時遇到錯誤,以下是錯誤:

錯誤:在loadtxt項目中的文件“ /home/kishore/.local/lib/python2.7/site-packages/numpy/lib/npyio.py”,第928行= [conv(val)for(conv,val)in zip(轉換器,vals)]

File "/home/kishore/.local/lib/python2.7/site-packages/numpy/lib/npyio.py", line 659, in floatconv
return float(x)
ValueError: could not convert string to float: CV\Line

我是Python編程的新手。 誰能幫助我知道如何解決這個問題。

首先,我們應該避開路徑中的空格,以確保它不會阻塞:

cv,dv = np.loadtxt('/home/kishore/Documents/Owlstone\ developer\ task\ briefing/test_matrix.csv',delimiter=',',unpack=True)

或者,將目錄名更改為沒有空格,例如Owlstone

或者,您可以將文件和腳本移動到同一目錄中,並刪除所有路徑信息,以證明在實際中首先找到文件就可以了。 從錯誤輸出中可以明顯看出,您沒有越過這一行,因此請先集中精力。

現在已經超過了逃逸的空間潛力,讓我們集中精力研究文件中的內容。 您的圖片和發布的數據未使用,作為分隔符。 修復並用作數據

-7.49952,7.6904296,7.64923087,7.81402579,7.59429923,7.73162833
-7.48388,7.56683341,7.51190177,7.38830558,7.67669669,7.38830558
-7.46824,7.03124992,7.38830558,7.49816886,7.51190177,7.66296378
-7.4526,7.53936759,7.66296378,7.71789542,7.62176505,7.6904296
-7.43696,7.49816886,7.73162833,7.45697013,7.71789542,7.38830558
-7.42132,7.01751701,7.20977775,7.48443595,7.58056632,7.81402579
-7.40568,7.58056632,7.71789542,7.70416251,7.49816886,7.58056632

我已經刪除了第一行(而不是上面建議的skiprows=1 ,因為它不能解決Too many values to unpack問題),我可以通過

dv = np.loadtxt('text.csv', delimiter=',')
print(dv)

生產

[[-7.49952     7.6904296   7.64923087  7.81402579  7.59429923  7.73162833]
 [-7.48388     7.56683341  7.51190177  7.38830558  7.67669669  7.38830558]
 [-7.46824     7.03124992  7.38830558  7.49816886  7.51190177  7.66296378]
 [-7.4526      7.53936759  7.66296378  7.71789542  7.62176505  7.6904296 ]
 [-7.43696     7.49816886  7.73162833  7.45697013  7.71789542  7.38830558]
 [-7.42132     7.01751701  7.20977775  7.48443595  7.58056632  7.81402579]
 [-7.40568     7.58056632  7.71789542  7.70416251  7.49816886  7.58056632]]

注意:您可以通過在控制台或代碼中包含以下內容來證明一切正常。

from StringIO import StringIO
c = StringIO("-7.49952,7.6904296,7.64923087,7.81402579,7.59429923,7.73162833\n-7.48388,7.56683341,7.51190177,7.38830558,7.67669669,7.38830558")
print(np.loadtxt(c, delimiter=","))

您也會看到一個不錯的數組。

現在要繪制圖表,我們將使用呈現的數據,並且矩陣的形式為(col2, col1) (X,Y)對,因此要繪制的前兩個值是(7.6904296, -7.49952)(7.56683341, -7.48388)而我們忽略了每行的其余部分,第3-6列,最初標記為2,3,4,5

def graph():
    dv = np.loadtxt('text.csv', delimiter=',')
    print(dv)
    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1)
    x = dv[:,1]
    y = dv[:,0]
    ax.scatter(x,y)
    plt.title('Chemical Presence')
    plt.ylabel('CV')
    plt.xlabel('DV')
    plt.show()

此處的dv[:,0]表示將數組dv替換為所有行,僅包含列0的值,其通用格式為array[rows,columns] 這段代碼給了我們

化學存在圖

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM