Установка столбцов DataFrame в виде строк фигуры FacetGrid - PullRequest
1 голос
/ 13 июня 2019

У меня есть набор данных по странам с несколькими показателями для каждого года и страны.Для простоты я сообщаю здесь только о двух показателях: выбросы парниковых газов и выбросы в атмосферу

rs = np.random.RandomState(4)
pos = rs.randint(-1, 2, (4, 5)).cumsum(axis=1)
pos -= pos[:, 0, np.newaxis]
pos2 = rs.randint(-4, 3, (4, 5)).cumsum(axis=1)
pos2 -= pos[:, 0, np.newaxis]
year = np.tile(range(5), 4)
walk = np.repeat(range(4), 5)

df = pd.DataFrame(np.c_[pos.flat, pos2.flat, year, walk],
                  columns=["Air emissions", 'GHG', "year", "Country ID"])

Я хочу разработать визуализацию, которая показывает тенденцию для каждого показателя в каждом году в стране.Каждый индикатор отображается в строке, а страны - это мои столбцы.Пока что это то, что я сделал для одного индикатора - выброса в атмосферу - но я также хотел бы показать тенденцию парниковых газов (и другие показатели, о которых здесь не сообщается) и добавить их в виде строки ниже выброса в атмосферу: как?

sns.set(style="ticks")

    # Initialize a grid of plots with an Axes for each walk
grid = sns.FacetGrid(df, col="Country ID", hue="year", palette="tab20c",
                         col_wrap=4, height=3)

    # Draw a line plot to show the trajectory of each random walk
grid.map(plt.plot, "year", "Air emissions",  marker="o")

    # Adjust the arrangement of the plots
grid.fig.tight_layout(w_pad=1)

как я могу это сделать?Циклическое?Но не перезаписывают ли это графики?

спасибо!

1 Ответ

0 голосов
/ 13 июня 2019

Вы захотите закодировать нужные переменные в строках FacetGrid в виде столбца с отдельным столбцом, содержащим значения для каждой переменной.Возможно, это не лучшее объяснение, но оно выглядело бы так:

    year  Country ID       variable  value
0      0           0  Air emissions      0
1      0           0            GHG      0
2      0           1  Air emissions      0
3      0           1            GHG     -3
4      0           2  Air emissions      0
5      0           2            GHG     -2
...

Тогда вы можете установить для параметра FacetGrid row значение 'variable' (вам также придется удалить col_wrap):

grid = sns.FacetGrid(x, row='variable', col="Country ID", hue="year", palette="tab20c", height=3)
grid.map(plt.plot, "year", "value",  marker="o")

Вы можете переформатировать ваш фрейм данных, используя pivot_table:

df = df.pivot_table(index=['year', 'Country ID'], values=['Air emissions', 'GHG']).stack().reset_index()
df.columns = ['year', 'Country ID', 'variable', 'value']
...