在python中绘制一组大数据和计算坡度的有效方法

在python中绘制一组大数据和计算坡度的有效方法,python,numpy,matplotlib,plot,large-data,Python,Numpy,Matplotlib,Plot,Large Data,我有一个32列的文本文件 Ev列2、列3、列4、列5、列6、列7、列8、列9、列10等(共32列) -0.08,8.300,8.300,8.300,8.301,8.300,8.300,8.300,8.300,8.301,3.405…(共32列) -0.04,8.300,8.300,8.300,8.301,8.300,8.300,8.300,8.300,8.301,3.405。。。(共32列) 0.00,8.300,8.300,8.300,8.301,8.300,8.300,8.300,8.300

我有一个32列的文本文件

Ev列2、列3、列4、列5、列6、列7、列8、列9、列10等(共32列)

-0.08,8.300,8.300,8.300,8.301,8.300,8.300,8.300,8.300,8.301,3.405…(共32列)

-0.04,8.300,8.300,8.300,8.301,8.300,8.300,8.300,8.300,8.301,3.405。。。(共32列)

0.00,8.300,8.300,8.300,8.301,8.300,8.300,8.300,8.300,8.301,3.405。。。(共32列)

0.04,8.300,8.300,8.300,8.301,8.300,8.300,8.300,8.300,8.301,3.405。。。(共32列)

0.08,8.300,8.300,8.300,8.301,8.300,8.300,8.300,8.300,8.301,3.405。。。(共32列)

我想把所有的32列都画在右边和左边。(即Ev与col2、Ev与col3……Ev与col 32)并计算其斜率

所以我尝试了蛮力法-

import matplotlib.pyplot as plt
import numpy as np

x1, y1, y2, y3, y4, y5, y6, y7, y8, y9, y10, y11, y12, y13, y14, y15, y16, y17, y18, y19, y20, y21, y22, y23, y24, y25, y26, y27, y28, y29, y30, y31, y32 = np.loadtxt('mydata.txt', delimiter=',', unpack=True)


slope1, intercept1 = np.polyfit(x1, y1, 1)
slope1, intercept1 = np.polyfit(x1, y2, 1)
slope1, intercept1 = np.polyfit(x1, y3, 1)
slope1, intercept1 = np.polyfit(x1, y4, 1)
#..... All the way upto 32nd column
print('slope 1 =',slope1)

plt.plot(x1,y1, label='With ',marker='o')
plt.plot(x1,y2, label='With ',marker='o')
plt.plot(x1,y3, label='With ',marker='o')
plt.plot(x1,y4, label='With ',marker='o')
plt.plot(x1,y5, label='With ',marker='o')
#.
#.
#.
#....All the way upto 32nd columns 
# ...plt.plot(x1,y32, label='mydata ',marker='o')

plt.show()

尽管这段代码有效,但我知道这不是一种有效的方法。是否有更好的方法绘制这些数据并获得斜率?

您不应该将
np.loadtxt
的结果显式地放入33个不同的变量中。将它放入一个名为
data
的文件中,然后按您需要的方式对其编制索引

data = np.loadtxt('mydata.txt', delimiter=',', skiprows=1)
plt.plot(data[0], data[1:])
也许你必须先转置它,比如

data = data.T
或使用

plt.plot(data[:, 0], data[:, 1:])
但是,我建议使用熊猫:

import pandas as pd
df = pd.read_csv(StringIO(s), index_col=0)
df.plot()
关于坡度计算:

data = data.T

array([[-0.08 , -0.04 ,  0.   ,  0.04 ,  0.08 ],
       [ 8.3  ,  8.3  ,  8.3  ,  8.3  ,  8.3  ],
       [ 8.3  ,  8.3  ,  8.3  ,  8.3  ,  8.3  ],
       [ 8.3  ,  8.3  ,  8.3  ,  8.3  ,  8.3  ],
       [ 8.301,  8.301,  8.301,  8.301,  8.301],
       [ 8.3  ,  8.3  ,  8.3  ,  8.3  ,  8.3  ],
       [ 8.3  ,  8.3  ,  8.3  ,  8.3  ,  8.3  ],
       [ 8.3  ,  8.3  ,  8.3  ,  8.3  ,  8.3  ]])

for y in data[1:]:
    print(np.polyfit(data[0], y, 1))

[ -1.12054027e-14   8.30000000e+00]
[ -1.12054027e-14   8.30000000e+00]
[ -1.12054027e-14   8.30000000e+00]
[  7.45493703e-15   8.30100000e+00]
[ -1.12054027e-14   8.30000000e+00]
[ -1.12054027e-14   8.30000000e+00]
[ -1.12054027e-14   8.30000000e+00]
或者使用
pandas
数据帧:

df

        col 2   col 3   col 4   col 5   col 6   col 7  col 8
Ev                                                          
-0.08     8.3     8.3     8.3   8.301     8.3     8.3    8.3
-0.04     8.3     8.3     8.3   8.301     8.3     8.3    8.3
 0.00     8.3     8.3     8.3   8.301     8.3     8.3    8.3
 0.04     8.3     8.3     8.3   8.301     8.3     8.3    8.3
 0.08     8.3     8.3     8.3   8.301     8.3     8.3    8.3

for name, data in df.iteritems():
    print(name, np.polyfit(data.index, data.values, 1))

col 2 [ -1.12054027e-14   8.30000000e+00]
col 3 [ -1.12054027e-14   8.30000000e+00]
col 4 [ -1.12054027e-14   8.30000000e+00]
col 5 [  7.45493703e-15   8.30100000e+00]
col 6 [ -1.12054027e-14   8.30000000e+00]
col 7 [ -1.12054027e-14   8.30000000e+00]
col 8 [ -1.12054027e-14   8.30000000e+00]

这些图应该是直线。不是零散的情节。还有一种方法可以计算成对地块上的坡度吗?但是“reg”只绘制回归线,而不是连接点的线。如果我可以纠正你描述成就的方式:你想绘制右侧与左侧的所有32列。这是您手动执行的操作,并将其称为“bruteforce”@SpghttCd是的,我想绘制右侧与左侧的所有32列,并计算坡度。回答不错,这比pairplot更好解决此问题+1有没有办法获得坡度?我不确定32个常量值列表中除了
0
之外,您期望的坡度是什么,但无论如何,坡度计算与绘图无关,因此您可以像以前一样将
polyfit
应用于x-y数据。我会更新。。。