Я пытаюсь создать график сводной таблицы, в котором ось X настроена пользователем.Мой код:
import pandas as pd
data_dict = {
'x' : [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],
'y' : [9,10,11,12,13,14,15,1,2,3,4,5,6,7,8]
}
res_table = pd.DataFrame(data_dict)
df_pivot = pd.pivot_table(res_table,
index='x', values='y',
aggfunc='sum')
ax = df_pivot.plot(kind='line', marker='*', title='y data')
ax.set(xlabel='x', ylabel='y')
ax.legend(bbox_to_anchor=(1,1), loc="upper left")
ax.figure
Этот код дает этот график:
Теперь я хочу изменить ось X так, чтобыоно начинается с 8 до 15, а затем следует с 1 по 7. Таким образом, график становится прямой линией.
Я попробовал этот код: ( Сводная таблица Pandas Nested Sorting )
order = [8, 9, 10, 11, 12, 13, 14, 15, 1, 2, 3, 4, 5, 6, 7]
pd.concat([res_table.loc[res_table['x'] == val, :].set_index(['x']) for val in order])
Но это, похоже, ничего не меняет.
* Редактировать: Конечно, я могу добавить дополнительный столбец с правильным индексом и построить график с использованием этого, но я бы предпочел, чтобы графикпоказать реальное значение x.
** Редактировать: Я отпраздновал немного раньше.В моем реальном коде есть дополнительные столбцы для отображения нескольких этих линий на одном графике
data_dict = {
'x' : [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],
'y' : [9,10,11,12,13,14,15,1,2,3,4,5,6,7,8,29,30,31,32,33,34,35,21,22,23,24,25,26,27,28],
'z' : [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
}
res_table = pd.DataFrame(data_dict)
df_pivot = pd.pivot_table(res_table,
index='x', values='y',
aggfunc='sum', columns='z')
cut_val = 8
tmp_df = pd.concat((df_pivot.loc[cut_val:],
df_pivot.loc[:cut_val-1])).reset_index()
print(tmp_df)
fig, ax = plt.subplots()
ax.plot(tmp_df.index, tmp_df.y, '-o')
ticks = ax.get_xticks()
ax.set_xticklabels(tmp_df.loc[ticks, 'x'])
ax.figure
Код останавливается на этой строке с ключевой ошибкой в tmp_df.y:
ax.plot(tmp_df.index, tmp_df.y, '-o')
Безстолбец аргумент код работает нормально
В исходном коде график выглядит следующим образом