График построения многоуровневых заголовков с помощью Matplotlib - PullRequest
1 голос
/ 17 января 2020

Я прочитал файл Excel следующим образом с Pandas, как я могу правильно отобразить его с Matplotlib?

Кстати, когда я read_clipboard() этот формат данных, он генерирует ParserError: Expected 4 fields in line 3, saw 5. Error could possibly be due to quotes being ignored when a multi-char delimiter is used.

enter image description here

После того, как вручную изменил файл Excel в следующем формате:

    date  A_ratio  A_price  B_ratio  B_price
0   2007    12.00     8.90     3.04     6.35
1   2008    13.00     8.78     4.04     6.25
2   2009    14.00     9.08     5.04     6.50
3   2010    14.71     9.21     1.38     6.60
4   2011    15.71     9.22     2.38     6.66
5   2012    16.71     9.27     3.38     6.66
6   2013    16.09     9.56     1.38     6.85
7   2014    17.09     9.71     2.38     6.94
8   2015    18.09     9.31     3.38     6.65
9   2016    19.09     9.88     4.38     6.95
10  2017    20.09     9.76     5.38     6.88

Я подготовил его с помощью следующего кода, он работает , но я не хочу менять его, поскольку мои исходные данные довольно большие:

df = df.set_index('date')
plt.figure(figsize=(10, 10))
cols = ['A_ratio', 'A_price', 'B_ratio', 'B_price']
df[cols].plot(kind='bar')
plt.xticks(rotation=45)
plt.xlabel("")

Вывод: enter image description here

Пожалуйста, помогите мне, спасибо.

1 Ответ

1 голос
/ 17 января 2020

Я думаю, вы можете использовать map с join для выравнивания MultiIndex:

df = df.set_index('date')
df.columns = df.columns.map('_'.join)

plt.figure(figsize=(10, 10))
cols = ['A_ratio', 'A_price', 'B_ratio', 'B_price']
df[cols].plot(kind='bar')
plt.xticks(rotation=45)
plt.xlabel("")

Или вы можете выбрать значения Multiindex с помощью tuple s:

df = df.set_index('date')

plt.figure(figsize=(10, 10))
cols = [('A','ratio'), ('A','price'), ('B','ratio'),('B','price')]
df[cols].plot(kind='bar')
plt.xticks(rotation=45)
plt.xlabel("")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...