Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有多系列的Python堆叠条形图_Python_Matplotlib_Charts_Bokeh_Seaborn - Fatal编程技术网

具有多系列的Python堆叠条形图

具有多系列的Python堆叠条形图,python,matplotlib,charts,bokeh,seaborn,Python,Matplotlib,Charts,Bokeh,Seaborn,我需要创建一个类似下图的图表,一系列堆叠的条形图。有些值为正值,有些值为负值。我希望图表的显示方式与excel中的堆叠条形图一样,它向上堆叠正值,向下堆叠负值。 对于N个类别,是否有一种简单的方法可以做到这一点 以下是一些示例数据: df = pd.DataFrame(index=['06-11-2018', '06-12-2018', '06-13-2018', '06-14-2018', '06-15-2018'], data={'A': [-378,

我需要创建一个类似下图的图表,一系列堆叠的条形图。有些值为正值,有些值为负值。我希望图表的显示方式与excel中的堆叠条形图一样,它向上堆叠正值,向下堆叠负值。 对于N个类别,是否有一种简单的方法可以做到这一点

以下是一些示例数据:

df = pd.DataFrame(index=['06-11-2018', '06-12-2018', '06-13-2018', '06-14-2018', '06-15-2018'], 
                  data={'A': [-378, -2347, 509, 987, 513], 
                        'B': [-527, -2599, 765, 533, 670], 
                        'C': [-2343, -2273, 2093, 2197, 1990], 
                        'D': [-1845, -1853, 3325, 1306, 2160]})

数据框的
绘图
函数按照您描述的方式处理负值。如果我们将数据框中的某些值更改为负值,则该行

df.plot(kind="bar", stacked=True)
给了我们这个图表:

我们可以添加一条与问题图像中的黑线类似的“总计”线,方法是将数据框的行相加,并将返回的
系列
对象绘制在与条形图相同的
轴上:

生成第二个图表的代码如下所示

import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame(index=['06-11-2018', '06-12-2018', '06-13-2018',
                         '06-14-2018', '06-15-2018'], 
                  data={'A': [-378, 2347, 509, 987, 513], 
                        'B': [527, 2599, -765, 533, 670], 
                        'C': [2343, -2273, 2093, -2197, 1990], 
                        'D': [1845, 1853, -3325, 1306, 2160]})

ax = df.plot(kind="bar", stacked=True)
df.sum(axis=1).plot(ax=ax, color="k")

plt.show()

数据框的
plot
函数按照您描述的方式处理负值。如果我们将数据框中的某些值更改为负值,则该行

df.plot(kind="bar", stacked=True)
给了我们这个图表:

我们可以添加一条与问题图像中的黑线类似的“总计”线,方法是将数据框的行相加,并将返回的
系列
对象绘制在与条形图相同的
轴上:

生成第二个图表的代码如下所示

import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame(index=['06-11-2018', '06-12-2018', '06-13-2018',
                         '06-14-2018', '06-15-2018'], 
                  data={'A': [-378, 2347, 509, 987, 513], 
                        'B': [527, 2599, -765, 533, 670], 
                        'C': [2343, -2273, 2093, -2197, 1990], 
                        'D': [1845, 1853, -3325, 1306, 2160]})

ax = df.plot(kind="bar", stacked=True)
df.sum(axis=1).plot(ax=ax, color="k")

plt.show()

谢谢,这很有效,但是有没有办法在这个图表上画一条“总”线呢?我尝试使用
.plot()
方法返回的
axes
对象,但没有成功。@GustavaAmarante当然,假设您已将返回的
axes
对象分配给名为
ax
的变量,则可以执行
df.sum(axis=1)plot(ax=ax,color=“k”)
(我指定了线条的颜色,因为如果没有它,它将返回到颜色循环的开始,并且蓝色已经在条形图上使用)。不幸的是,这不起作用。代码运行时没有任何错误或警告,但图表根本不会更新。我尝试了颠倒顺序(先绘制线条,然后绘制条形图)但同样的事情发生了,它不会在第二个系列中更新。@GustavoAmarante我已经编辑了答案以显示总行数。看看你的代码与我的代码相比如何:如果代码相同,但你仍然看不到行数,我想你正在问一个新问题。谢谢,这很有效,但有办法得出“总行数”吗此图表上方的线条?我尝试使用
.plot()
方法返回的
axes
对象,但没有成功。@GustavaAmarante当然,假设您已将返回的
对象分配给名为
ax
的变量,您可以执行
df.sum(axis=1)。plot(ax=ax,color=“k”)
(我指定了线条的颜色,因为如果没有它,它将返回到颜色循环的开始,并且蓝色已经在条形图上使用)。不幸的是,这不起作用。代码运行时没有任何错误或警告,但图表根本不会更新。我尝试了颠倒顺序(先绘制线条,然后绘制条形图)但同样的事情发生了,它不会在第二个系列中更新。@GustavoAmarante我编辑了答案以显示总行数。看看你的代码与我的代码相比如何:如果代码相同,但你仍然看不到行数,我想你是在问一个新问题。