2014-08-30 121 views
0

我有一个数据框已被按值升序排序。它看起来像这样。熊猫matplotlib barh酒吧打印从底部到顶部,但标签打印顶部到底部

Name Count 
19 PAGEBGFX 1 
18 CODE 1 
17 .orpc 2 
16 .sdata 3 
15 PAGE 4 
14 PAGELK 4 
13 .data1 4 
12 data 6 
11 .tls 6 
10 text 6 
9 .ndata 8 
8 minATL 13 
7 .imrsiv 41 
6 .rdata 209 
5 .pdata 501 
4 .idata 660 
3 .reloc 896 
2 .data 930 
1 .rsrc 962 
0 .text 998 

当我使用水平条形图进行绘制时,条似乎从底部到顶部填充。所以我的数据框中的第一行是我的图表中的底部栏。这是绘图代码。

ypos = np.arange(len(section_names_df)) + .1 
plt.barh(ypos, section_names_df['Count']) 
plt.yticks(ypos +.4, section_names_df['Name']) 
plt.show() 

horizontal bar chart

所以标签似乎已经从顶部到所述数据帧的底部,但杆的长度填充从底部到顶部被填充。这是它应该如何或我做错了什么?任何关于如何使这更简单的指针?

编辑我创建了一个iPython笔记本来演示问题,用完整的代码来重现问题。 http://nbviewer.ipython.org/gist/blackfist/dd0941f3ddbbc0f724a1

+0

进一步审查似乎表明该问题与分选做绘图前的数据帧。如果我不分类,那么事情看起来很好。 – 2014-08-31 03:35:39

回答

1

尝试调用

section_names_df.reset_index(inplace=True) 

绘制之前。问题是数据帧按索引的顺序迭代,因此需要重新设置以匹配排序的顺序。

+0

谢谢凯尔。你知道一种方法来排序和reset_index在一个命令?这有点刺激。 – 2014-08-31 04:42:03

+0

@KevinThompson,我不知道一个优雅的解决方案,但你可以使用类似df.index = numpy.argsort(df [“column”])。 – 2014-08-31 04:45:39

+0

您可能想重新提出这个问题,以获得熊猫专家的更多关注。 – 2014-08-31 04:57:10

1

对于你的问题的第一部分,你会想到用这个代码相反的顺序来扭转你的数据帧BARH图绘制之前:

df = df.iloc[::-1]