FacetGrid绘图中的单独线条,因此所有线条仅连接到其各自的组

时间:2019-04-25 17:00:22

标签: python pandas matplotlib seaborn

我正在尝试使用Python 2.7和Seaborn重新创建此图:

enter image description here

如您所见,每个方面都有该大陆上每个国家/地区的时间序列图,并且这些线仅连接其各自国家/地区(组)内的点。

到目前为止,这是我的代码,由于某种原因,我无法弄清楚如何使这些线仅在其组内连接,而不能使所有的线相互连接:

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()

这是我当前的情节,您可以看到所有点相互连接的意思:

enter image description here

此图形最初是使用Rggplot2创建的。我的下一个尝试是在数据集中创建带有加权变量的黑线。我不确定使用Seaborn是否不可能。另外,请注意,我知道ggplot模块可用于Python,但目前不希望使用该模块。

1 个答案:

答案 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()

输出:

enter image description here