【问题标题】:Plot a 2D graph from a csv file using matplotlib in Python in ubuntu在 ubuntu 中使用 Python 中的 matplotlib 从 csv 文件中绘制 2D 图
【发布时间】:2016-01-14 05:59:35
【问题描述】:

我必须使用 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 文件。 数据文件看起来像附在此处data file 的屏幕截图。这里 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

但我在执行代码时遇到错误。以下是错误:

错误: 文件“/home/kishore/.local/lib/python2.7/site-packages/numpy/lib/npyio.py”,第 928 行,在 loadtxt items = [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 编程新手。谁能帮助我知道如何解决这个问题。

【问题讨论】:

  • 感谢您的回复。我按照您的建议进行了必要的更改。出现了一个新错误,如下所述“文件“test.py”,第 5 行,在图中 cv,dv = np.loadtxt(open('/home/kishore/test/test_mat.csv'),delimiter=', ', skiprows=1,unpack=True) ValueError: too many values to unpack ".值太多的原因是数据文件实际上包含 54 列和 961 行条目。我该如何克服这个错误信息?

标签: python python-2.7 csv matplotlib


【解决方案1】:

首先,我们应该避开路径中的空格,以确保它不会因此而窒息:

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]。这段代码给了我们

【讨论】:

  • 感谢您的回复。我已将文件和脚本的路径简化为一个文件夹。我仍然得到同样的错误。我想知道是否应该尝试添加一个转换器来读取数据文件中的浮点值?
  • 我在问题中提到了一小部分数据文件内容
  • 我不想输入!请粘贴一些文本,以便我们重新创建您的问题。 MCVE.
  • 我已按照您的要求将数据包含在代码中。
  • 感谢您的回复。如何从文件中选择几个值并尝试绘制它们。在这种情况下如何在代码中表示数据?
猜你喜欢
  • 2016-02-14
  • 2012-11-12
  • 1970-01-01
  • 2016-07-03
  • 2019-06-26
  • 1970-01-01
  • 1970-01-01
  • 2021-10-10
相关资源
最近更新 更多