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