我已经在这里坐了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()
我的情节是这样的: 但我希望它看起来像这样:
您必须使用循环并根据相应的国家/地区固定每条曲线的颜色
相关问题 更多 >
编程相关推荐