如何 select 循环中的所有键 x

How to select all keys in loop for x

部分Gasprices.txt喜欢

04-05-1993:1.068

04-12-1993:1.079

04-19-1993:1.079

05-09-1994:1.045

05-16-1994:1.046

05-23-1994:1.05


import matplotlib.pyplot as plt

import numpy as np


with open('c:/Gasprices.txt', 'r') as file:
    td = dict()
    for line in file:
        year = line[6:10]
        price = float(line[11:])
        td.setdefault(year, []).append(price)
    for k, v in td.items():
        Year =f'{k}'
        avg_price = f'{sum(v)/ len(v)}'
        print(Year, avg_price)

上面代码的结果是

1993 1.0711538461538466

1994 年 1.0778653846153845

1995 1.1577115384615386

1996 年 1.2445283018867925

1997 年 1.2442499999999999

1998 1.071711538461538

1999 年 1.1760576923076924

2000 年 1.522730769230769

2001 年 1.4603018867924529

2002 年 1.385961538461538

2003 1.603019230769231

2004 年 1.8946923076923083

2005 年 2.314461538461538

2006 年 2.6182692307692315

2007 年 2.8434716981132078

2008 年 3.2989038461538462

2009 年 2.4058269230769236

2010 年 2.835057692307693

2011 3.576423076923077

2012 3.6796415094339627

2013 3.651441176470588


我想使用这个结果来使用 matplotlib 绘制图形。但是由于循环,如果我使用这样的代码

import matplotlib.pyplot as plt

import numpy as np


with open('c:/Gasprices.txt', 'r') as file:
    td = dict()
    for line in file:
        year = line[6:10]
        price = float(line[11:])
        td.setdefault(year, []).append(price)
    for k, v in td.items():
        Year =f'{k}'
        avg_price = f'{sum(v)/ len(v)}'
        print(Year, avg_price)


x=Year
y=avg_price
plt.plot(x,y, 'o--')
plt.title('Average gas price per year in US')
plt.xlabel('year')
plt.ylabel('Avg.gas price per gallon[$]')
plt.grid()
plt.xticks(np.arange(1993, 2014, 1))
plt.xticks(rotation=45)
plt.yticks(np.arange(1.0, 4.0, 0.5))
plt.tight_layout()

plt.show()

图中只画了最后一条信息2013 3.651441176470588

如何将所有年份信息和 avg_price 信息分别放入 x 和 y 中?

您需要将这些信息添加到列表中(此处 xy):

x = []
y = []
with open('c:/Gasprices.txt', 'r') as file:
    td = dict()
    for line in file:
        year = line[6:10]
        price = float(line[11:])
        td.setdefault(year, []).append(price)
    for k, v in td.items():
        Year = f'{k}'
        avg_price = f'{sum(v)/ len(v)}'
        print(Year, avg_price)
        x.append(Year)
        y.append(avg_price)

由于您的数据是字符串,因此您需要转换它们:

x = [int(i) for i in x]  # Years are int
y = [float(i) for i in y]  # Prices are float

然后你可以用同样的方式调用你的情节:

plt.plot(x,y, 'o--')
plt.title('Average gas price per year in US')
plt.xlabel('year')
plt.ylabel('Avg.gas price per gallon[$]')
plt.grid()
plt.xticks(np.arange(1993, 2014, 1))
plt.xticks(rotation=45)
plt.yticks(np.arange(1.0, 4.0, 0.5))
plt.tight_layout()

plt.show()