用 args 绘图以在同一图中有线条
plotting with args to have lines in the same plot
我希望根据时间绘制特征的多个值,我正在使用 *args
参数来这样做。我所拥有的是在我的函数中输入两个或更多参数时的几个图,我明白为什么会这样。但是,我无法弄清楚如何将它们全部放在同一个情节中。这是我的代码来启发我的意图。
示例数据:
year city population
2013 Ankara xxxx
2013 London xxxx
2013 Paris xxx
.... ..... xxx
2014 Ankara xxxx
2014 London xxx
2014 Paris xxxx
... .... ....
2015 Ankara xxxx
.... .... ....
当我这样做时 df[df['city']=='Ankara'
我得到了安卡拉人口和独特年份的 df。现在我要做的是从中获取 2 个或三个城市并将它们绘制在同一个地块上。
def city_over_time(*args):
global df
for city in args:
df=df[df['city']==city]
plt.plot(df.year, df.population)
plt.tight_layout()
所以当我执行以下操作时:
city_over_time('Manchester', 'Liverpool')
我在下面得到一张曼彻斯特的地块和另一张利物浦的地块。但我希望两者都在同一个数字中。就像我正在策划以下内容一样:
plt.plot(df[df.city=='Manchester']['year'], df[df.city=='Manchester']['population'])
plt.plot(df[df.city=='Liverpool']['year'], df[df.city=='Liverpool']['population'])
使用pivot
to get data in a more usable format, select cities as columns, then plot
:
def city_over_time(frame, *cities):
plot_df = frame.pivot(index='year',
columns='cities',
values='population')[list(cities)]
plot_df.plot(xticks=plot_df.index,
ylabel='Population')
plt.tight_layout()
plt.show()
带有示例数据的完整工作示例:
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
np.random.seed(5)
df = pd.DataFrame({
'year': np.repeat(np.arange(2013, 2016), 3),
'cities': ['Ankara', 'London', 'Paris'] * 3,
'population': np.random.randint(100_000, 200_000, size=9)
})
print(df)
def city_over_time(frame, *cities):
plot_df = frame.pivot(index='year',
columns='cities',
values='population')[list(cities)]
plot_df.plot(xticks=plot_df.index,
ylabel='Population')
plt.tight_layout()
plt.show()
city_over_time(df, 'London', 'Paris')
df
:
year cities population
0 2013 Ankara 135683
1 2013 London 118638
2 2013 Paris 120463
3 2014 Ankara 105520
4 2014 London 159465
5 2014 Paris 133800
6 2015 Ankara 133508
7 2015 London 181639
8 2015 Paris 134750
plot_df
(df
在 pivot
之后过滤 cities
):
cities London Paris
year
2013 118638 120463
2014 159465 133800
2015 181639 134750
我希望根据时间绘制特征的多个值,我正在使用 *args
参数来这样做。我所拥有的是在我的函数中输入两个或更多参数时的几个图,我明白为什么会这样。但是,我无法弄清楚如何将它们全部放在同一个情节中。这是我的代码来启发我的意图。
示例数据:
year city population
2013 Ankara xxxx
2013 London xxxx
2013 Paris xxx
.... ..... xxx
2014 Ankara xxxx
2014 London xxx
2014 Paris xxxx
... .... ....
2015 Ankara xxxx
.... .... ....
当我这样做时 df[df['city']=='Ankara'
我得到了安卡拉人口和独特年份的 df。现在我要做的是从中获取 2 个或三个城市并将它们绘制在同一个地块上。
def city_over_time(*args):
global df
for city in args:
df=df[df['city']==city]
plt.plot(df.year, df.population)
plt.tight_layout()
所以当我执行以下操作时:
city_over_time('Manchester', 'Liverpool')
我在下面得到一张曼彻斯特的地块和另一张利物浦的地块。但我希望两者都在同一个数字中。就像我正在策划以下内容一样:
plt.plot(df[df.city=='Manchester']['year'], df[df.city=='Manchester']['population'])
plt.plot(df[df.city=='Liverpool']['year'], df[df.city=='Liverpool']['population'])
使用pivot
to get data in a more usable format, select cities as columns, then plot
:
def city_over_time(frame, *cities):
plot_df = frame.pivot(index='year',
columns='cities',
values='population')[list(cities)]
plot_df.plot(xticks=plot_df.index,
ylabel='Population')
plt.tight_layout()
plt.show()
带有示例数据的完整工作示例:
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
np.random.seed(5)
df = pd.DataFrame({
'year': np.repeat(np.arange(2013, 2016), 3),
'cities': ['Ankara', 'London', 'Paris'] * 3,
'population': np.random.randint(100_000, 200_000, size=9)
})
print(df)
def city_over_time(frame, *cities):
plot_df = frame.pivot(index='year',
columns='cities',
values='population')[list(cities)]
plot_df.plot(xticks=plot_df.index,
ylabel='Population')
plt.tight_layout()
plt.show()
city_over_time(df, 'London', 'Paris')
df
:
year cities population
0 2013 Ankara 135683
1 2013 London 118638
2 2013 Paris 120463
3 2014 Ankara 105520
4 2014 London 159465
5 2014 Paris 133800
6 2015 Ankara 133508
7 2015 London 181639
8 2015 Paris 134750
plot_df
(df
在 pivot
之后过滤 cities
):
cities London Paris
year
2013 118638 120463
2014 159465 133800
2015 181639 134750