Python(matplotlib):如何在条形图中从上到下翻转负条形图

Python(matplotlib):如何在条形图中从上到下翻转负条形图,python,pandas,matplotlib,bar-chart,Python,Pandas,Matplotlib,Bar Chart,多亏了stack overflow和web上的许多资源,我已经能够使用matplotlib创建一个类似于此的图形(这是一个google图像,不是我的图形) 现在,我想知道是否有可能使所有的杆都处于直立位置。因为图形表示的主要目的是直观地比较每组的不同值,但在某些组颠倒时进行比较在视觉上不吸引人,也不方便 请问我怎样才能把负条从上下颠倒到竖直的位置,使我的图形看起来像这样 此外,我还有一个以制表符分隔的表,看起来像这样 Students Grade Eat Sleep Score Labe

多亏了stack overflow和web上的许多资源,我已经能够使用matplotlib创建一个类似于此的图形(这是一个google图像,不是我的图形)

现在,我想知道是否有可能使所有的杆都处于直立位置。因为图形表示的主要目的是直观地比较每组的不同值,但在某些组颠倒时进行比较在视觉上不吸引人,也不方便

请问我怎样才能把负条从上下颠倒到竖直的位置,使我的图形看起来像这样

此外,我还有一个以制表符分隔的表,看起来像这样

Students Grade Eat Sleep Score Label
Ali       A    -0.5 0.09  2.1   M
Ryan      B    0.01 -1.1 -0.08  C
Ben       C    0.76 7.5 -0.0001 M
Eyr       A    0.5  0.9  -0.087 M
Tify      A   -0.09 -0.08 0.987 M
Nola      B   -0.5  0.03  1.18  M
West      C    1.2  1.3  -0.76  C
Nile      C    0.2  0.07 -1.09  C

我创建了一个pandas数据框,通过调用以下命令,我能够从表中绘制特定行:

l1 = df[(df['Grade'] == 'A') & (df['Label'] == 'M')]
我有一个非常大的数据,我想在一个图表中有更多的信息,以节省空间。如何在一个图形中显示多个信息,例如Grade=A、Grade=C和label=M。因此,我想要一个显示Grade=C和label=M以及Grade=A和label=M值的图形。

小演示:

样本DF:

In [71]: df
Out[71]:
     A
0  100
1  -20
2  130
3  200
4  -80

In [72]: df['A'].plot.bar(grid=True)
Out[72]: <matplotlib.axes._subplots.AxesSubplot at 0xdff9198>
中间结果:

[76]中的
new=[int(l.get_text())+df['A'].min()如果l.get_text().isdigit()否则l.get_text()在ax.get_-yticklabels()中代表l]
In[77]:ax.set\u yticklabels(新)
Out[77]:
[,
,
,
,
,
,
]
“固定”y形记号标签后:


这个问题相对不清楚;为什么不在绘图之前先获取数据的绝对值呢?这将“将负条形图从倒置翻转到竖直位置”。我希望它是一个简单的条形图,在X轴的顶部放置正负值。如果我取绝对值,y轴上的值不会改变吗?@Cave,你能把你的样本数据作为文本发布,这样我们就可以复制它吗?@MaxU,好的,但我不知道如何发布表格,所以我把它作为代码发布。谢谢!我可以问一下为什么4号位置的第五条消失了吗?@Cave,因为它现在是
0
。这是df['a']+abs(df['a'].min())的结果。如果你认为它已经回答了你的问题,请考虑回答。
In [75]: ax = df.assign(X=df['A'] + abs(df['A'].min()))['X'].plot.bar(grid=True)
In [76]: new = [int(l.get_text()) + df['A'].min() if l.get_text().isdigit() else l.get_text()  for l in ax.get_yticklabels()]

In [77]: ax.set_yticklabels(new)
Out[77]:
[<matplotlib.text.Text at 0xdfa6a20>,
 <matplotlib.text.Text at 0xd11cfd0>,
 <matplotlib.text.Text at 0xe25c240>,
 <matplotlib.text.Text at 0xe25cdd8>,
 <matplotlib.text.Text at 0xe269630>,
 <matplotlib.text.Text at 0xe269e48>,
 <matplotlib.text.Text at 0xd06b198>]