2016-08-04 68 views
0

我正在尝试使用matplotlib来绘制多索引图。但是,我正在努力从先前回答的代码中找到确切的代码。任何人都可以帮助我如何生成类似的图表。使用Matplotlib进行多索引绘图

enter image description here

import pandas as pd 
import matplotlib.pyplot as plt 
import pylab as pl 
import numpy as np 
import pandas 

xls_filename = "abc.xlsx" 
f = pandas.ExcelFile(xls_filename) 
df = f.parse("Sheet1", index_col='Year' and 'Month') 
f.close() 

matplotlib.rcParams.update({'font.size': 18}) # Font size of x and y-axis 
df.plot(kind= 'bar', alpha=0.70) 

它不是索引,因为我想和没有产生预期以及图形。帮助赞赏。

回答

1

我创建了一个DataFrame中的一些值,我在你附加的图上看到并绘制了它。

index = pd.MultiIndex.from_tuples(tuples=[(2011,), (2012,), (2016, 'M'), (2016, 'J')], names=['year', 'month']) 
df = pd.DataFrame(index=index, data={'1': [10, 140, 6, 9], '2': [23, 31, 4, 5], '3': [33, 23, 1, 1]}) 
df.plot(kind='bar') 

这就是结局

enter image description here

,其中数据帧是这样

enter image description here

+0

嗨@维吾尔族居内伊,谢谢。任何想法如何从图中消除NaN。我试过df [〜np.isnan(df)],其中df是当前数据帧。 – saltymisty73

+0

嗨! 'np.isnan(df)'或'df.isnan()'只检查数据帧的值,而不检查其索引。如果您通过'df.index.levels [1]'查看月份级别索引,您会发现在那里没有None。我猜那些NaNs只有在显示df表时才会出现。 我将单引号放在月份部分,而不是在创建元组时将它留空:tuples = [(2011,''),(2012,''),(2016,'M'),(2016,'J ')]'仍然不是一个很好的解决方案,但至少在剧情中你看不到“NaN”这个词。 –

+0

嗯......这很有趣。我曾尝试类似的方法来避免NaN,但仍然在图上显示括号。但是,你的方法给出了一个想法来产生一个像上面这样的图。 – saltymisty73