【发布时间】:2021-03-07 10:31:38
【问题描述】:
我已经坐在这里尝试完成这项工作超过 3 个小时,但我不明白如何解决我的问题。我有这个项目,我有一堆关于不同国家二氧化碳排放的数据,我应该把这些数据画出来。还应使用两种不同的方法对数据进行平滑处理,并进行绘图。这使得每个国家都有 3 条不同的线(一条原始数据线,一条使用方法 #1 进行平滑处理,一条使用方法 #2 进行平滑处理)。这是我的问题。我想为 5 个国家/地区绘制此数据,这将产生 15 条不同的线,但我希望将它们分组/链接到其各自的国家,这意味着它们应该以三个为一组进行绘制(这些组应该具有相同的颜色和标签/图例)。我不知道如何更好地表达我的问题。
这是我所有的代码,但问题在于“Del B”及以后:
import csv
import matplotlib.pyplot as plt
#smooth_a
def smooth_a(x, n):
r=[] #Tom lista
temp=[] #Temporär lista
for i in range(n):
temp.insert(0, x[0]) #Lägger in första elementet från listan x n gånger i temporära listans början
temp.append(x[-1]) #Lägger in sista elementet från lista x n gånger i temporära listans slut
temp = temp[:n] + x + temp[-n:] #Lägger in hela lista x i mitten av den temporära listan
i=0
for element in temp[n:-n]: #Går på intervallet som enbart uppgörs av lista x i den temporära listan
e=temp.index(element,n+i) #e=indexet elementet uppgör i den temporära listan
a=sum(temp[e-n:e+n+1])/(2*n + 1) #Räknar ut medelvärdet med det givna intervallet n
r.append(a) #Lägger in medelvärdet i lista r
i+=1 #Gör att "e" går till nästa index
return r
#smooth_b
def smooth_b(x, n):
r=[] #Tom lista
temp=[] #Temporär lista
for i in range(2*n):
temp.append("invalid") #Lägger in ett sträng element 2*n gånger i den temporära listan
temp=temp[:n] + x + temp[-n:] #Lägger in hela lista x i mitten av den temporära listan
i=0
for element in temp[n:-n]: #Går på intervallet som enbart uppgörs av lista x i den temporära listan
e=temp.index(element,n+i) #e=indexet elementet uppgör i den temporära listan
low=0 #Låga intervallet
high=0 #Höga intervallet
while type(temp[e-n+low])==str: #Om låga intervallet blir "invalid" ska intervallet minskas från vänster
low+=1
while type(temp[e+n-high])==str: #Om höga intervallet blir "invalid" ska intervallet minskas från höger
high+=1
a=sum(temp[e-n+low:e+n+1-high])/(n-low+n-high+1) #Räknar ut medelvärdet med det nya höga/låga intervallet
r.append(a)
i+=1 #Gör att "e" går till nästa index
return r
#Del A
def load_csv(filename): #skapar en funktion
with open(filename, 'r') as file: #öppnar angivna filen i read-mode
reader = csv.reader(file) #läser filen genom att sätta raderna till en lista av type = str
next(reader) #hoppar över första raden (rubrikerna)
CO2_dict = {column[1].lower():list(map(float, column[3:])) for column in reader} #lexikonbeskrivning som skapar ett lexikon där nyckeln är landskoden (i små bokstäver) och värdet är all data omvandlat till float.
return CO2_dict
#Del B
CO2_dict=load_csv('CO2Emissions_filtered.csv')
country_list=['dnk', 'fin', 'isl', 'nor', 'swe']
values = []
for country in country_list:
values.append(CO2_dict[country])
time = list(range(1960, 2015))
fig, ax = plt.subplots()
for country in values:
smoothing_a=smooth_a(country,5)
smoothing_b=smooth_b(country,5)
ax.plot(time, smoothing_a, '-', linewidth=2)
ax.plot(time, smoothing_b, '--', linewidth=2)
ax.plot(time, country,':', linewidth=2)
ax.legend(country_list)
ax.set(xlabel='Year', ylabel='CO2 Emissions [kt]', title='Yearly emissions of Co2 in the Nordic countries')
ax.grid()
plt.show()
我的情节是这样的: 但我希望它看起来像这样:
【问题讨论】:
标签: python matplotlib