
皆さまいつも丁寧な御回答ありがとうございます。
0.02, 5.9
0.13, 20.1
0.11, 1.4
0.27, 37.8
0.09, 55.9
0.22, 83.2
0.31, 12.1
0.44, 32.4
0.97, 83.1
0.72, 15
というデータ列があります。(SampleData.txt)
これを0.1刻みで積算したプロットを作りたいと考えています。
x<0.1の時は5.9+55.9=61.8
0.1<=x<0.2の時 20.1+1.4=21.5........というような感じです。
実際のデータ列は1000個ほどあります。
そこで先日のアドバイスも参考に以下のようなコードを組みました。
////////////以下プログラム//////////////////////////
import numpy as np
import matplotlib.pyplot as plt
import sys, string
from matplotlib.widgets import MultiCursor
x = np.arange(0, 1, 0.1)
dsum = [0]*len(x)
f = open("SampleData.txt", "r")
for line in f:
t = line.split(",")
p = float(t[0])
q = float(t[1])
j = 0
while j <= len(x):
if p <= x[j]:
dsum[j] += q
break
j += 0.1
y = dsum
plt.plot(x, y, c="g", mec="p")
plt.show()
ですが、
dsum[j] += q
TypeError: list indices mus be integers, not float
というエラーが出てしまいます。
どこかで、積算を整数ではない形へ変更しないといけないと思うのですが、どの部分を変更するのがよいのでしょうか・・・・?
ご回答よろしくお願いいたします。
また
https://oshiete.goo.ne.jp/qa/9288507.html
でご教授いただいた、整数のプロットと同時にプロットしたいと思っています。
0.1<=x<1は上記のもの、x<1は先日のものという感じです。
どのようなコードを書くのが適切でしょうか?
ご回答よろしくお願いいたします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
> type(x) #=> <class 'list'>
> print(x) #=> [0.1, 0,2, ……]
失礼。
print( type(x) ) でした。
> 上記の部分はどういう意味でしょうか?
コンソールでプログラムを実行した場合に
xがリスト(list)オブジェクトなら <class 'list'> と表示するという意味です。
np.arangeの場合と変わらず、やはりグラフが出力されないのですが、どこが問題なんでしょう・・・?
ValueError: to_rgba:Invalid rgba arg "p"
to_rgb: Invalid rgb arg "p"
というエラーが出ています・・・(´;ω;`)
////////////////以下プログラム/////////////////////////////
import numpy as np
import matplotlib.pyplot as plt
import sys, string
from matplotlib.widgets import MultiCursor
x = np.arange(0, 1, 0.1)
type(x)
dsum = [0.0]*len(x)
f = open("SampleData2.txt", "r")
for line in f:
t = line.split(",")
p = float(t[0])
q = float(t[1])
j = 0
while j < len(x):
if p < x[j]:
dsum[j] += q
break
j += 1
y = dsum
print(x)
print(y)
plt.plot(x, y, c="g", mec="p")
plt.title("test")
plt.xlabel("x axis label")
#plt.xscale("log")
plt.xlim(0,2)
plt.ylabel("y axis label", fontsize = "20")
#plt.yscale("log")
plt.show()
No.2
- 回答日時:
> つまり、x<=0.1, 0.1<x<=0.2, ......, 0.9<x<=1, 1<x<=2......
> といったかんじで場合分けをして積算をしたいと思っています。
x1 = [0.1,……,0,9]
x2 = [1.0,……,1000.0]
というリストオブジェクトを作成して
x = x1 + x2 です。
> としたのですが、エラーは出ずグラフにデータは出力されません。
> どういうことなのでしょうか?
私は numpyを使用したことがないのですが
np.arange(0, 1, 0.1)
は、リストオブジェクトを生成するのでしょうか?
確認下さい。
type(x) #=> <class 'list'>
print(x) #=> [0.1, 0,2, ……]
type(x) #=> <class 'list'>
print(x) #=> [0.1, 0,2, ……]
上記の部分はどういう意味でしょうか?
type(x)をプログラムに加えてみてもグラフは出力されませんでした・・・
No.1
- 回答日時:
> TypeError: list indices mus be integers, not float
dsumの初期化時の要素を小数にします。
dsum = [0.0]*len(x)
その他
・jは要素番号を示すので、小数ではなく整数になります。
また、要素番号は要素数nの場合、0~n-1です。
while j < len(x): ← j<=ではない
j += 1 ← 0.1ではない
・n <= x < n+0.1 という範囲であればif文の条件は以下ではないかと
if p < x[j]: ← p <= ではない
> 整数のプロットと同時にプロットしたいと思っています。
> 0.1<=x<1は上記のもの、x<1は先日のものという感じです。
行いたいことがわかりません。
plt.plot(x, y, c="g", mec="p")
の段階で、x = [0.1, 0.2, ……]にどの様な値が入っていることを期待していますか?
回答ありがとうございます。
> 行いたいことがわかりません。
xには0~1000までの実数が入っています。
xを対数として、0~1までは0.1刻みでyの積算を、xが1~1000までは1刻みでyの積算をしたいと思っています。
つまり、x<=0.1, 0.1<x<=0.2, ......, 0.9<x<=1, 1<x<=2......
といったかんじで場合分けをして積算をしたいと思っています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
オブジェクトレベルとメタレベル
-
0byteのallocaやmemset
-
エクセルでオブジェクト内の文...
-
VBA 同じ名前のオブジェクトを...
-
Excelで =EMBED("Acrobat Docu...
-
複数プロジェクト間での値渡し
-
ASP.net 教えてください!!(...
-
ビジュアルC++でボタンの有...
-
bmp画像をjpegやpng画像に圧縮...
-
Object型からDouble型へのキャスト
-
CFileDialogでフォルダだけを選...
-
ワイルドカード<?>と型パラメー...
-
Java認定試験3級の問題です。 ...
-
開始日(Date型)から終了日(Date...
-
戻り値がクラスオブジェクト
-
CoCreateInstanceでエラーになる。
-
VBAからノーツを起動
-
パワーポイントのVBAでテキスト...
-
C#でフォームのオブジェクト名...
-
Listに格納されているオブジェ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで =EMBED("Acrobat Docu...
-
VBA 同じ名前のオブジェクトを...
-
EXCEL VBAにて動的にCheckBOXを...
-
パワーポイントのVBAでテキスト...
-
C#でフォームのオブジェクト名...
-
VBAのWindowオブジェクトとWork...
-
Object型からDouble型へのキャスト
-
時間帯判定をする。
-
C++で*thisは何を指しているの...
-
ワイルドカード<?>と型パラメー...
-
Accessの連結・非連結オブジェ...
-
COMコンポーネントって何?
-
newは明示的にした方が良いのか?
-
ビジュアルC++でボタンの有...
-
CoCreateInstanceでエラーになる。
-
ResultSet での問題
-
多人数のじゃんけんプログラム
-
printerオブジェクトでのテキス...
-
サーブレットのクラス図について。
-
VBSでのステートメントの末尾が...
おすすめ情報
x = np.arange(0, 1, 0.1)
dsum = [0.0]*len(x)
f = open("SampleData.txt", "r")
for line in f:
t = line.split(",")
p = float(t[0])
q = float(t[1])
j = 0
while j < len(x):
if p < x[j]:
dsum[j] += q
break
j += 1
y = dsum
plt.plot(x, y)
plt.show()
としたのですが、エラーは出ずグラフにデータは出力されません。
どういうことなのでしょうか?
(冒頭部は省略)