0

私のスクリプトのユーザーが、タイプ アカウント (例: 1930、1940 など) の 1 - n グラフと、毎年のすべてのアカウントの合計を印刷できるようにしたいという問題があります。

プロットしたいグラフは次のようになります (この例では、2 つのアカウント (1930 年と 1940 年) で、毎年のすべてのアカウントの合計):

グラフ印刷の入力は次のようになります (スクリプトのユーザーは、ユーザーが望む 1 ~ n の数のアカウントを選択できる必要があります)。

How many accounts to print graphs for? 2
Account 1 :
1930
Account 2 :
1940

システムは勘定科目を配列 ( accounts = [1930,1940] ) に格納し、毎年のすべての勘定科目の合計を検索します。アカウントの年と合計は に配置されますmatrix ([[2008, 1, 12], [2009, 7, 30], [2010, 13, 48], [2011, 19, 66], [2012, 25, 84], [2013, 31, 102]])

これが完了したら、1 - n 個のグラフ (この場合は 2 個のグラフ) をプロットします。しかし、1 - n アカウントでプロットする方法がわかりません...

今のところ、このコードを使用してグラフを印刷するだけで、静的です:(:

#fix the x serie
x_years = []
for i in range (nrOfYearsInXML):
    x_years.append(matrix[x][0])
    x = x + 1
plt.xticks(x_years, map(str,x_years))

#fix the y series, how to solve the problem if the user shows 1 - n accounts?

1930_sum = [1, 7, 13, 19, 25, 31]
1940_sum = [12, 30, 48, 66, 84, 102]

plt.plot(x_years, konto1_summa, marker='o', label='1930')
plt.plot(x_years, konto2_summa, marker='o', label='1940')
plt.xlabel('Year')
plt.ylabel('Summa')
plt.title('Sum for account per year')
plt.legend()
plt.show()

わかりましたので、for ループなどで試してみましたが、1-n 個のアカウントと 1-n 個のアカウントに固有のアカウント ラベルでそれを理解することができませんでした..

私のシナリオでは、ユーザーが 1 ~ n 個のアカウントを選択します。アカウントを指定します (例: 1930,1940,1950..)。アカウントを配列に格納します。システムは、毎年の 1-n アカウントの合計を計算し、このデータをマトリックスに配置します。アカウント配列とマトリックスから読み取り、1-n グラフをプロットするときのシステム。アカウント ラベル付きのすべてのグラフ。

問題の短いバージョン...

たとえば、行列に x 値 (2008 年から 2013 年) と y 値 (毎年の勘定科目の合計) があり、次のような配列に勘定科目 (ラベルとしても使用する必要があります) があるとします。

accounts = [1930,1940]
matrix = [[2008, 1, 12], [2009, 7, 30], [2010, 13, 48], [2011, 19, 66], [2012, 25, 84], [2013, 31, 102]]

または、次のように x と y を説明できます。

x       y1(1930 graph1)     y2(1940 graph2)
2008        1               12
2009        7               30
2010        13              48
etc         etc             etc

私にとっての問題は、ユーザーが 1 つから複数のアカウント (アカウント [1..n]) を選択できることです。これにより、1 つから複数のアカウント グラフが作成されます。

それを解決する方法はありますか.. :)?

BR/M

4

1 に答える 1

0

あなたが何を求めているのかよくわかりませんが、これがあなたが望んでいることだと思います:

# set up axes
fig, ax = plt.subplots(1, 1)
ax.set_xlabel('xlab')
ax.set_ylabel('ylab')

# loop and plot
for j in range(n):
    x, y = get_data(n) # what ever function you use to get your data
    lab = get_label(n)
    ax.plot(x, y, label=lab)
ax.legend()
plt.show()

より具体的には、上で投稿したマトリックス構造があると仮定します。

# first, use numpy, you have it installed anyway if matplotlib is working
# and it will make your life much nicer
data = np.array(data_list_of_lists)
x = data[:,0]
for j in range(n):
    y = data[:, j+1]
    ax.plot(x, y, lab=accounts[j])

これを行うより良い方法は、データをdict

data_dict[1940] = (x_data_1940, y_data_1940)
data_dict[1930] = (x_data_1930, y_data_1930)
# ...

for k in acounts:
     x,y = data_dict[k]
     ax.plot(x, y, lab=k)
于 2013-10-10T03:35:32.190 に答える