【问题标题】:plot from csv data in python从python中的csv数据绘制
【发布时间】:2020-05-19 03:20:30
【问题描述】:

我是 python 新手,正在练习 csv 数据操作。 现在我有一种情况,我有 100 * 4 个数据,其中第 i 行对应于第 i 个示例 (x_i, y_i) 第 1,2 和 3 列用于每个输入变量 (x_1, x_2, 1) abd 4 -th 列是输出 y。 然后,确定适当的常数 (a,b)(这里假设为 (6, 5))。

现在我要绘制图形,x 轴为 ax_1+bx_2,y 轴为 y。

这里是部分数据。

"x1","x2","1","y"
-0.626453810742332,-0.620366677224124,1,0.28239638205273
0.183643324222082,0.0421158731442352,1,1.73290072129656
-0.835628612410047,-0.910921648552446,1,-0.293950695808836

这是我试图完成的代码

import numpy as np
import matplotlib.pyplot as plt

if __name__ == '__main__':

    x1 = []
    x2 = []
    y = []
    a = 6
    b = 5

    with open('data.csv', 'r') as f:
        lines = f.readlines()
        tmp_x1 = np.array(lines)[:,0]
        tmp_x2 = np.array(lines)[:,1]
        tmp_y = np.array(lines)[:,3]
        x1.append(tmp_x1)
        x2.append(tmp_x2)
        y.append(tmp_y)

    ax1 = list()
    bx2 = list()

    for i in range(100):
        ax1.append(a * x1)
        bx2.append(b * x2)

    plt.figure()
    plt.xlabel('a*x1 + b*x2')
    plt.ylabel('y')
    plt.plot(ax1 + bx2, y)

这段代码给了我错误

IndexError: 数组索引过多

有人可以帮我解决这个问题吗?

[编辑][图表]1

代码:

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('data.csv')

a,b = 6,5

df['x'] = df['x1']*a + df['x2']*b

plt.figure()
plt.plot(df['x'], df['y'])
plt.show()

【问题讨论】:

    标签: python python-3.x numpy matplotlib


    【解决方案1】:

    f.readlines() 将读取文件中的所有内容并将其放入列表中。该列表只是一个一维数组,长度为文件中的数字。可以使用numpy函数genfromtxt将数据直接加载到numpy数组中

    lines = np.genfromtxt('data.csv', delimiter=',' ,skip_header=1)
    

    【讨论】:

      【解决方案2】:

      我推荐使用pandas 来处理表格数据:

      import pandas as pd
      
      df = pd.read_csv('data.csv')
      
      a,b = 6,5
      
      df['x'] = df['x1']*a + df['x2']*b
      
      df.plot(x='x',y='y')
      

      输出:

      或者如果您想为字段1标识的每个输入绘制一条线:

      # continue the code above
      # replace the last line with
      fig, ax = plt.subplots()
      for k,d in df.groupby('1'):
          d.plot(x='x',y='y', ax=ax, label=k)
      

      输出:

      【讨论】:

      • 感谢您的回答。我运行了这段代码,但没有得出任何图表,所以我使用 matplotlib 重写了代码,然后情节是这样的(添加到帖子中)。我错过了什么?
      猜你喜欢
      • 2023-02-09
      • 2017-12-12
      • 1970-01-01
      • 2015-01-30
      • 2017-11-19
      • 1970-01-01
      • 1970-01-01
      • 2013-10-09
      • 1970-01-01
      相关资源
      最近更新 更多