我正在尝试使用Python 2.7和Seaborn重新创建此图:
如您所见,每个方面都有该大陆上每个国家/地区的时间序列图,并且这些线仅连接其各自国家/地区(组)内的点。
到目前为止,这是我的代码,由于某种原因,我无法弄清楚如何使这些线仅在其组内连接,而不能使所有的线相互连接:
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np
url = 'https://python-graph-gallery.com/wp-content/uploads/gapminderData.csv'
def add_cols(grp):
grp['popl'] = grp['pop'].apply(lambda x: x/10**5)
grp['gdp_wt'] = np.average(grp['gdpPercap'], weights = grp['pop'])
grp['pop_wt'] = sum(grp['pop'])
return grp
dat = (pd.read_csv(url)
.query('country != "Kuwait"')
.groupby(['year','continent'])
.apply(add_cols))
f = sns.FacetGrid(dat, col='continent', hue='continent')
f = f.map(plt.plot, 'year', 'gdpPercap', marker='o', group=dat.country) # Attempting to assign group here but it's not working
f = f.map(plt.plot, 'year', 'gdp_wt', c='k', marker='o')
plt.show()
plt.clf()
这是我当前的情节,您可以看到所有点相互连接的意思:
此图形最初是使用R
和ggplot2
创建的。我的下一个尝试是在数据集中创建带有加权变量的黑线。我不确定使用Seaborn
是否不可能。另外,请注意,我知道ggplot
模块可用于Python,但目前不希望使用该模块。
答案 0 :(得分:1)
将hue
设置为country
并使用调色板:
# map continental to color
colors = {con:color for con, color in zip(df.continent.unique(), ['r','b','g','m', 'b'])}
# create palette by country name
pal = {country:colors[con] for country, con in set(zip(df.country, df.continent))}
# use the palette
f = sns.FacetGrid(dat, col='continent', hue='country', palette=pal)
f = f.map(plt.plot, 'year', 'gdpPercap', marker='o') # Attempting to assign group here but it's not working
f = f.map(plt.plot, 'year', 'gdp_wt', color='k', marker='o')
plt.show()
plt.clf()
输出: