我有一个问题,我的脚本用户希望能够打印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个帐户。指定帐户(ex 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]),这将产生1到多个帐户图。
任何想法如何解决它... :)?
BR / M
答案 0 :(得分: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)