0

我有一个问题,我的脚本的用户希望能够打印 1 - n 个帐户类型的图表(例如 1930,1940 等)以及每个帐户每年的总和。

我要绘制的图表应该是这样的(在这个前 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..n]),这将导致一对多帐户图表。

知道如何解决它.. :)?

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 回答