Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用循环绘制多个绘图,然后合并这些绘图_Python_Arrays_Matplotlib_Plot_Linear Regression - Fatal编程技术网

Python 使用循环绘制多个绘图,然后合并这些绘图

Python 使用循环绘制多个绘图,然后合并这些绘图,python,arrays,matplotlib,plot,linear-regression,Python,Arrays,Matplotlib,Plot,Linear Regression,基本上,我想完成的任务是使用for循环生成几个图,然后我想将这些图合并成一个图。一旦我有了多个图,我想把所有的图合并成一个图,其中有我以前的图的所有点和所有线性回归线。以下是我的代码,我一直在努力完成这一壮举: import math import numpy as np from matplotlib import pyplot as plt uH2 = 1.90866638 uHe = 3.60187307 eH2 = 213.38 eHe = 31.96 R = float(uH2*e

基本上,我想完成的任务是使用for循环生成几个图,然后我想将这些图合并成一个图。一旦我有了多个图,我想把所有的图合并成一个图,其中有我以前的图的所有点和所有线性回归线。以下是我的代码,我一直在努力完成这一壮举:

import math
import numpy as np
from matplotlib import pyplot as plt

uH2 = 1.90866638
uHe = 3.60187307
eH2 = 213.38
eHe = 31.96

R = float(uH2*eH2)/(uHe*eHe)

Delta = []
C_Values = []
kHeST = []
J_f21 = []
data = np.genfromtxt("Lamda_HeHCL.txt", unpack=True); 
J_i1=data[1]; 
J_f1=data[2]; 
kHe=data[7]

data = np.genfromtxt("Basecol_Basic_New_1.txt", unpack=True); 
J_i2=data[0]; 
J_f2=data[1]; 
kH2=data[5]

print kHe
print kH2

kHe = map(float, kHe)
kH2 = map(float, kH2)

kHe = np.array(kHe)
kH2= np.array(kH2)

g = len(kH2)

for i in range(20):
    for n in range(0,g):
        if J_f2[n] == i:    
                Jf21 = J_f2[n]
                J_f21.append(Jf21)
                ratio = kHe[n]/kH2[n]
                C = (((math.log(float(kH2[n]),10)))-(math.log(float(kHe[n]),10)))/math.log(R,10)
                C_Values.append(C)
                St = abs(J_f1[n] - J_i1[n])
                Delta.append(St)

fig, ax = plt.subplots()
ax.scatter(Delta,C_Values)

m, b = np.polyfit(Delta, C_Values, 1)
x = np.linspace(0, 12, 50) # both 0 and 12 are from visually inspecting the plot
plt.plot(x, np.poly1d(np.polyfit(Delta, C_Values, 1))(x), label = "y = {}*x + {}".format(m, b))
plt.xlim(0, 12)
plt.ylim(-3, 3)

for i, txt in enumerate(J_f21):
    ax.annotate(txt, (Delta[i],C_Values[i]))

plt.legend()
plt.show()

上图是代码编译和绘制的内容。但是,我希望有多个绘图。我一直在尝试使用这一行
如果J_f2[n]==I:
尝试在I=1到20时绘制多个图。一旦我有了它,我想把所有的情节组合成一个带有适当图例的情节

下面是Basecol文件的一个片段:

2   1   1   1   5.536e-11  6.9932e-11 7.6179e-11 7.7972e-11 7.3478e-11 6.9928e-11 5.7645e-11 5.1923e-11
3   1   1   1   2.0055e-11 2.1203e-11 2.1748e-11 2.2311e-11 2.2817e-11 2.3063e-11 2.4038e-11 2.5299e-11
3   2   1   1   1.6342e-11 2.075e-11  2.373e-11  2.8027e-11 3.2632e-11 3.5054e-11 4.3652e-11 4.9243e-11
4   1   1   1   9.307e-12  9.202e-12  9.0085e-12 8.7567e-12 8.6751e-12 8.723e-12  9.2386e-12 9.6497e-12
4   2   1   1   1.0556e-11 1.135e-11  1.1889e-11 1.2677e-11 1.3755e-11 1.4523e-11 1.8932e-11 2.3811e-11
4   3   1   1   7.649e-12  8.4137e-12 9.3186e-12 1.1427e-11 1.4925e-11 1.7296e-11 2.8093e-11 3.6589e-11
5   1   1   1   4.9158e-13 4.7265e-13 4.8109e-13 5.3278e-13 6.5653e-13 7.6023e-13 1.4127e-12 2.1105e-12
5   2   1   1   1.0458e-11 1.0189e-11 1.003e-11  0.998e-11  1.026e-11  1.0529e-11 1.1983e-11 1.3233e-11
5   3   1   1   4.691e-12  4.9662e-12 5.2767e-12 5.9551e-12 7.0047e-12 7.76e-12   1.2318e-11 1.7668e-11
5   4   1   1   1.1144e-11 1.0575e-11 1.0487e-11 1.1112e-11 1.3046e-11 1.4654e-11 2.3451e-11 3.1304e-11
6   1   1   1   2.3703e-13 2.3679e-13 2.3847e-13 2.5019e-13 2.8183e-13 3.1013e-13 5.3148e-13 8.7515e-13
6   2   1   1   8.4873e-13 8.2252e-13 8.2998e-13 8.9342e-13 1.0548e-12 1.1898e-12 2.0178e-12 2.8894e-12
以下是lamda的一个片段:

    1    2   1    4.151E-12 4.553E-12 4.600E-12 4.852E-12 6.173E-12 7.756E-12 9.383E-12 1.096E-11 1.243E-11 1.379E-11 1.504E-11 1.619E-11 1.724E-11 2.139E-11 2.426E-11 2.791E-11 3.009E-11 3.152E-11 3.252E-11 3.326E-11 3.382E-11 3.426E-11 3.462E-11 3.572E-11 3.640E-11 3.698E-11 3.752E-11
    2    3   1    1.433E-12 1.655E-12 1.907E-12 2.014E-12 2.282E-12 2.682E-12 3.159E-12 3.685E-12 4.246E-12 4.833E-12 5.440E-12 6.059E-12 6.688E-12 9.845E-12 1.285E-11 1.810E-11 2.238E-11 2.590E-11 2.886E-11 3.139E-11 3.359E-11 3.552E-11 3.724E-11 4.375E-11 4.832E-11 5.192E-11 5.486E-11
    3    3   2    1.451E-11 1.661E-11 1.839E-11 1.828E-11 1.833E-11 1.904E-11 2.002E-11 2.111E-11 2.223E-11 2.334E-11 2.442E-11 2.546E-11 2.646E-11 3.071E-11 3.397E-11 3.860E-11 4.176E-11 4.407E-11 4.585E-11 4.728E-11 4.845E-11 4.944E-11 5.028E-11 5.326E-11 5.525E-11 5.681E-11 5.807E-11
    4    4   1    9.498E-13 1.129E-12 1.315E-12 1.358E-12 1.414E-12 1.489E-12 1.560E-12 1.621E-12 1.671E-12 1.711E-12 1.745E-12 1.773E-12 1.797E-12 1.893E-12 1.994E-12 2.246E-12 2.528E-12 2.803E-12 3.060E-12 3.298E-12 3.518E-12 3.722E-12 3.914E-12 4.729E-12 5.370E-12 5.876E-12 6.268E-12
    5    4   2    2.602E-12 2.885E-12 3.182E-12 3.254E-12 3.517E-12 3.972E-12 4.555E-12 5.230E-12 5.971E-12 6.763E-12 7.591E-12 8.444E-12 9.314E-12 1.371E-11 1.789E-11 2.517E-11 3.105E-11 3.586E-11 3.985E-11 4.325E-11 4.619E-11 4.879E-11 5.112E-11 6.031E-11 6.732E-11 7.317E-11 7.813E-11
    6    4   3    1.383E-11 1.630E-11 1.850E-11 1.868E-11 1.913E-11 2.014E-11 2.136E-11 2.265E-11 2.396E-11 2.525E-11 2.650E-11 2.773E-11 2.891E-11 3.423E-11 3.866E-11 4.543E-11 5.015E-11 5.346E-11 5.581E-11 5.750E-11 5.876E-11 5.974E-11 6.053E-11 6.344E-11 6.611E-11 6.886E-11 7.155E-11
    7    5   1    3.627E-13 4.225E-13 4.790E-13 4.952E-13 5.395E-13 6.089E-13 6.905E-13 7.757E-13 8.600E-13 9.414E-13 1.019E-12 1.092E-12 1.162E-12 1.451E-12 1.665E-12 1.965E-12 2.182E-12 2.367E-12 2.541E-12 2.711E-12 2.882E-12 3.052E-12 3.222E-12 4.046E-12 4.790E-12 5.431E-12 5.963E-12
    8    5   2    4.752E-13 5.685E-13 6.563E-13 6.844E-13 7.533E-13 8.520E-13 9.663E-13 1.091E-12 1.224E-12 1.365E-12 1.513E-12 1.668E-12 1.829E-12 2.704E-12 3.646E-12 5.506E-12 7.179E-12 8.632E-12 9.893E-12 1.100E-11 1.197E-11 1.284E-11 1.362E-11 1.660E-11 1.868E-11 2.027E-11 2.155E-11
    9    5   3    2.314E-12 2.672E-12 2.994E-12 3.069E-12 3.318E-12 3.740E-12 4.271E-12 4.876E-12 5.535E-12 6.236E-12 6.971E-12 7.734E-12 8.520E-12 1.264E-11 1.681E-11 2.466E-11 3.158E-11 3.760E-11 4.289E-11 4.756E-11 5.175E-11 5.552E-11 5.895E-11 7.257E-11 8.256E-11 9.049E-11 9.695E-11
   10    5   4    1.337E-11 1.597E-11 1.820E-11 1.849E-11 1.920E-11 2.052E-11 2.209E-11 2.370E-11 2.528E-11 2.679E-11 2.823E-11 2.960E-11 3.090E-11 3.648E-11 4.090E-11 4.751E-11 5.224E-11 5.585E-11 5.878E-11 6.126E-11 6.344E-11 6.540E-11 6.719E-11 7.447E-11 8.003E-11 8.451E-11 8.812E-11
   11    6   1    1.235E-13 1.397E-13 1.550E-13 1.603E-13 1.793E-13 2.101E-13 2.490E-13 2.940E-13 3.439E-13 3.980E-13 4.556E-13 5.161E-13 5.789E-13 9.136E-13 1.254E-12 1.880E-12 2.404E-12 2.836E-12 3.194E-12 3.497E-12 3.755E-12 3.979E-12 4.177E-12 4.924E-12 5.472E-12 5.935E-12 6.343E-12
   12    6   2    2.320E-13 2.707E-13 3.068E-13 3.189E-13 3.550E-13 4.099E-13 4.757E-13 5.476E-13 6.230E-13 7.007E-13 7.796E-13 8.592E-13 9.394E-13 1.345E-12 1.759E-12 2.607E-12 3.463E-12 4.303E-12 5.113E-12 5.888E-12 6.626E-12 7.329E-12 7.998E-12 1.090E-11 1.323E-11 1.510E-11 1.659E-11

您可以使用
plt.subplot()
创建多个子地块。然后,您可以迭代子图并将数据绘制到相应的子图中,如下所示

import numpy as np; np.random.seed(1) 
import matplotlib.pyplot as plt

y = np.random.normal(size=(36,12))
x = np.random.rayleigh(size=(36,12))
x0 = np.linspace(0,3)

fig, axes = plt.subplots(ncols=3, nrows=4, sharex=True, sharey=True, figsize=(7,7))

for i, ax in enumerate(axes.flatten()):
    ax.scatter(x[:,i], y[:,i], s=10)
    m, b = np.polyfit(x[:,i], y[:,i], 1)
    ax.plot(x0, m*x0+b, lw=1., label="y={:.2f}x+{:.2f}".format(m,b))
    ax.legend()

plt.tight_layout()    
plt.show()

您是只对线性型感兴趣,还是也可以使用二次型?我这样问是因为数据在视觉上看起来不在一条直线上,二次曲线应该会给出更好的拟合,二次曲线也应该适用于我正在做的事情。我只是不知道如何做到这一点。根据numpy的文档,您可以将对np.polyfit(Delta,C_值,1)的每次调用替换为np.polyfit(Delta,C_值,2)以拟合二次多项式。现在还有三个参数值要打印。当我试图修改代码时,我遇到了一个元组错误。TypeError:列表索引必须是整数,而不是tupleIt’对于未知代码中发生的错误,不可能说任何事情。报告错误时,当然应该提供再现错误的代码(请参阅)和完整的回溯,从中可以看出错误发生的行。