-1

テキストファイルからデータを読み取っていますが、その場合、プロット関数で3*sqrt(col1)=のようにこの値を複数にする必要があります。x1.append(3*math.sqrt(float(p[1])))プロットする前に複数の列番号データを取得するにはどうすればよいですか? たとえば、col3 データを 3*sqrt(col3) で乗算してから、そのデータをプロットします。

#-------input.dat---------
#   x        y     z
# col 1    col 2  col 3
# 3          5      5
# 5          6      4
# 7          7      3
import matplotlib.pyplot as plt
import numpy as np
import pylab as pl
import math

data = open('input.dat')
lines = data.readlines()
data.close()
x1=[]
y1=[]
z1=[]
plt.plot(1)
for line in lines[2:]:
p= line.split()
x1.append(3*math.sqrt(float(p[1])))
y1.append(3*math.sqrt(float(p[2])))
z1.append(3*math.sqrt(float(p[3])))
x=np.array(x1)
y=np.array(y1)
z=np.array(z1)
plt.subplot(311)
plt.plot(x,'b',label=" X figure ")
plt.subplot(312)
plt.plot(y,'r',label=" Y figure ")
plt.subplot(313)
plt.plot(x,z,'g',label=" X,Z figure ")
plt.show()
4

1 に答える 1

2

繰り返しnumpyますが、最初から配列を使用するだけの方が簡単です。

前回の質問で示したようにデータを読み取ると、データはすでにnumpy配列になっています。次に、numpy.sqrt関数を使用して、配列に対して要素ごとに平方根演算を実行できます。

#-------input.dat---------
#   x        y     z
# col 1    col 2  col 3
# 3          5      5
# 5          6      4
# 7          7      3
import matplotlib.pyplot as plt
import numpy as np

data = np.genfromtxt('input.dat', skip_header=2)

x = 3. * np.sqrt(data[:, 0])
y = 3. * np.sqrt(data[:, 1])
z = 3. * np.sqrt(data[:, 2])

plt.subplot(311)
plt.plot(x, 'b', label=" X figure ")
plt.subplot(312)
plt.plot(y, 'r', label=" Y figure ")
plt.subplot(313)
plt.plot(x, z, 'g', label=" X,Z figure ")
plt.show()

ここに画像の説明を入力

ただし、古いコードを使い続けたい場合は、次の方法で修正できます。

  1. インデントの修正、

  2. インデックス付けをp[0]p[1]およびに変更 ( 、およびp[2]の代わりに)p[1]p[2]p[3]

このコードは、上記と同じプロットを生成します。

import matplotlib.pyplot as plt
import numpy as np
import pylab as pl
import math

data = open('input.dat')
lines = data.readlines()
data.close()
x1=[]
y1=[]
z1=[]
plt.plot(1)
for line in lines[2:]:
    p= line.split()
    x1.append(3*math.sqrt(float(p[0])))
    y1.append(3*math.sqrt(float(p[1])))
    z1.append(3*math.sqrt(float(p[2])))
x=np.array(x1)
y=np.array(y1)
z=np.array(z1)
plt.subplot(311)
plt.plot(x,'b',label=" X figure ")
plt.subplot(312)
plt.plot(y,'r',label=" Y figure ")
plt.subplot(313)
plt.plot(x,z,'g',label=" X,Z figure ")
plt.show()
于 2018-06-15T10:09:04.133 に答える