Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.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-从Pandas数据创建单个水平堆叠条形图?_Python_Pandas_Matplotlib - Fatal编程技术网

Python-从Pandas数据创建单个水平堆叠条形图?

Python-从Pandas数据创建单个水平堆叠条形图?,python,pandas,matplotlib,Python,Pandas,Matplotlib,我希望创建一个水平堆叠条形图,作为饼图的替代,以显示百分比 我很确定plot.barh会完成这项工作,它会在我的另一段代码中创建多个堆叠条。但在这里它没有堆叠的酒吧。我怎么修理它 import pandas as pd import matplotlib.pyplot as plt data=pd.DataFrame(data={"R1":["Yes","Yes","Yes","No","No"]}) freq = data["R1"].value_counts(normalize=True)

我希望创建一个水平堆叠条形图,作为饼图的替代,以显示百分比

我很确定plot.barh会完成这项工作,它会在我的另一段代码中创建多个堆叠条。但在这里它没有堆叠的酒吧。我怎么修理它

import pandas as pd
import matplotlib.pyplot as plt

data=pd.DataFrame(data={"R1":["Yes","Yes","Yes","No","No"]})
freq = data["R1"].value_counts(normalize=True)*100
fig,ax = plt.subplots()
freq.plot.barh(ax=ax,stacked=True)

堆叠意味着将一个数据帧的多个系列放在彼此的顶部,这样它们的值就会累积起来。 您只有一个具有两个值的系列,因此这些值被绘制在一个条形系列中

您可以从序列中生成一个数据帧,对其进行转换,使“是”和“否”为两列,每列具有一个值,然后按您尝试的方式绘制:

freq.to_frame().T.plot.barh(stacked=True)
要检查差异,请执行以下操作:

freq

# Yes    60.0
# No     40.0
# Name: R1, dtype: float64

freq.to_frame().T

#      Yes    No
# R1  60.0  40.0

哎哟,这很有效,是的。但出于某种原因,Matplotlib将该图置于法线轴下方,因此我得到两个图,正确的一个位于普通空白图下方,一个具有默认轴,我似乎无法将图像添加到注释中,抱歉。以前从没见过!我该如何解决这个问题?没有代码是不可能的。正如你上面问题的原则在这里得到了回答,这个新问题可能更好地放在一个新问题中。