皆さまいつも丁寧な御回答ありがとうございます。
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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- 工学 Pythonの3Dグラフ表示に関する質問です。 1 2022/12/06 15:03
- その他(プログラミング・Web制作) ColabでのPytorchのエラー 1 2022/11/19 20:51
- C言語・C++・C# データの外挿について 3 2023/06/13 20:46
- 工学 Pythonの3次元描画に関する質問です 3 2022/12/07 20:07
- その他(プログラミング・Web制作) pandasでまとめてインデックスを削除するにはどうすればいいですか? たとえば、以下のプログラムで 1 2022/07/31 23:09
- その他(プログラミング・Web制作) pythonのこのエラーがわかりません 3 2022/11/16 14:54
- その他(プログラミング・Web制作) python 2 2022/12/23 09:06
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#でフォームのオブジェクト名...
-
VBAのWindowオブジェクトとWork...
-
パワーポイントのVBAでテキスト...
-
JAVAからHTMLへ値を返す方法
-
Excelで =EMBED("Acrobat Docu...
-
ビジュアルC++でボタンの有...
-
EXCEL VBAにて動的にCheckBOXを...
-
VBA 同じ名前のオブジェクトを...
-
時間帯判定をする。
-
Java認定試験3級の問題です。 ...
-
error C2712: オブジェクト ア...
-
Listに格納されたオブジェクト...
-
オブジェクト指向とモジュール設計
-
JSPのout.printについて
-
ArrayLsitのデータ取得
-
vb.net オブジェクト指向につい...
-
C# Proxyを通してブラウザを開...
-
VBAのFileSearchと同じことをV...
-
Object型からDouble型へのキャスト
-
ワイルドカード<?>と型パラメー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パワーポイントのVBAでテキスト...
-
Excelで =EMBED("Acrobat Docu...
-
JAVAからHTMLへ値を返す方法
-
ワイルドカード<?>と型パラメー...
-
C#でフォームのオブジェクト名...
-
VBAのWindowオブジェクトとWork...
-
EXCEL VBAにて動的にCheckBOXを...
-
VBA 同じ名前のオブジェクトを...
-
Object型からDouble型へのキャスト
-
ビジュアルC++でボタンの有...
-
COMコンポーネントって何?
-
LISTBOXの内容が更新されま...
-
Vbで通常使用するプリンターを...
-
多人数のじゃんけんプログラム
-
オブジェクト名をforループ内で...
-
ASP.net 教えてください!!(...
-
JSPのout.printについて
-
時間帯判定をする。
-
error C2712: オブジェクト ア...
-
Accessの連結・非連結オブジェ...
おすすめ情報
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()
としたのですが、エラーは出ずグラフにデータは出力されません。
どういうことなのでしょうか?
(冒頭部は省略)