📜  使用 Pandas 创建水平条形图

📅  最后修改于: 2022-05-13 01:54:19.482000             🧑  作者: Mango

使用 Pandas 创建水平条形图

先决条件:熊猫

条形图将具有相应数据值的分类数据表示为矩形条。通常,x 轴代表分类值,y 轴代表数据值或频率。这称为垂直条形图,反之称为水平条形图。在某些情况下,水平条形图提供更好的可读性。

Python有各种可视化库,例如 Matplotlib 和 Seaborn。 Pandas 库与 Matplotlib 紧密集成,允许通过 DataFrame 和 Series 对象直接创建绘图。本文探讨了使用 Pandas 创建水平条形图的方法。

使用绘图实例 在 Pandas DataFrame 中,可以创建各种图形,包括条形图。有两种表示复杂类别的条形图:

  1. 分组或复合条形图– 当您有一个主类别的子类别时,此图表会在相应类别中为每个变量或子类别分配一个单独的条形。
  2. 堆叠条形图– 当您有一个主类别的子类别时,此图表会将子类别堆叠在一起以生成单个条形图。

Pandas 的bar()barh()方法分别绘制垂直和水平条形图。本质上, DataFrame.plot(kind="bar")等效于DataFrame.plot.bar() 。以下是使用上述函数创建不同类型条形图的一些示例。

简单的水平条形图

句法:

DataFrame.plot.barh()

barh()方法接受 x 和 y 参数,其中 x 采用分类值(默认情况下,它采用 DataFrame 的索引),y 采用所有数字列。 DataFrame.plot( ) 支持的关键字参数(如标题或图形大小)可以传递给 barh ()方法以自定义条形图。给出的实现描述了一个水平条形图,表示喜欢特定类别美食的人数。

例子:

Python3
# Import required libraries
import pandas as pd
  
# Create a sample dataframe
df = pd.DataFrame({'Cuisine': ['Italian', 'Indian', 'Mexican', 'Chinese'],
                   'Number of People': [20, 25, 15, 10]})
  
# Plot a bar chart
df.plot.barh(x='Cuisine', y='Number of People',
             title='Cuisine Preference', color='green')


Python3
# Import required libraries
import pandas as pd
  
# Create a sample dataframe
df = pd.DataFrame({'Number of Males': [10, 15, 25, 14],
                   'Number of Females': [20, 25, 15, 10]},
                  index=['Italian', 'Indian', 'Mexican', 'Chinese'])
  
# Plot grouped horizontal bar chart
df.plot.barh(title="Gender wise Cuisine preference chart",
             color={"green", "pink"})


Python3
# Import required libraries
import pandas as pd
  
# Create a sample dataframe
df = pd.DataFrame({'Number of Males': [10, 15, 25, 14],
                   'Number of Females': [20, 25, 15, 10]},
                  index=['Italian', 'Indian', 'Mexican', 'Chinese'])
  
# Plot stacked horizontal bar chart
df.plot(kind="barh", title="Gender wise Cuisine preference chart",
        color={"green", "pink"})


Python3
# Import required libraries
import pandas as pd
  
# Create a sample dataframe
df = pd.DataFrame({'Number of Males': [10, 15, 25, 14],
                   'Number of Females': [20, 25, 15, 10]},
                  index=['Italian', 'Indian', 'Mexican', 'Chinese'])
  
# Convert numeric values to percentage of whole
percent_df = df.apply(lambda x: (x * 100) / sum(x), axis=1)
  
# Plot stacked horizontal bar chart
percent_df.plot.barh(stacked=True,
                     title="Male-Female percentage composition of Cuisine preferences")


输出:

复合水平条形图

从上面的例子中,如果人们被分为男性和女性的子组,那么我们可以用复合水平条形图来表示这些数据。此示例显示了一个水平条形图,表示使用两种方法偏爱特定类别菜肴的男性和女性人数。

示例 2

使用barh()方法的条形图

蟒蛇3

# Import required libraries
import pandas as pd
  
# Create a sample dataframe
df = pd.DataFrame({'Number of Males': [10, 15, 25, 14],
                   'Number of Females': [20, 25, 15, 10]},
                  index=['Italian', 'Indian', 'Mexican', 'Chinese'])
  
# Plot grouped horizontal bar chart
df.plot.barh(title="Gender wise Cuisine preference chart",
             color={"green", "pink"})

输出:

示例 3:

使用plot()方法的条形图

蟒蛇3

# Import required libraries
import pandas as pd
  
# Create a sample dataframe
df = pd.DataFrame({'Number of Males': [10, 15, 25, 14],
                   'Number of Females': [20, 25, 15, 10]},
                  index=['Italian', 'Indian', 'Mexican', 'Chinese'])
  
# Plot stacked horizontal bar chart
df.plot(kind="barh", title="Gender wise Cuisine preference chart",
        color={"green", "pink"})

输出:

堆叠水平条形图

堆积条形图可用于表示不同子组的组成或贡献。下面的示例显示了一个水平条形图,表示喜欢特定类别菜肴的男性和女性的百分比。堆叠水平条形图将数据框中每个观测值的值并排放置在单个条形中。但是,它堆叠数值而不是整体的百分比。因此,我们首先将数据值转换为整体的百分比,然后使用barh()函数并将 stack 参数设置为 True 来创建填充的堆叠水平条形图。

示例 4

蟒蛇3

# Import required libraries
import pandas as pd
  
# Create a sample dataframe
df = pd.DataFrame({'Number of Males': [10, 15, 25, 14],
                   'Number of Females': [20, 25, 15, 10]},
                  index=['Italian', 'Indian', 'Mexican', 'Chinese'])
  
# Convert numeric values to percentage of whole
percent_df = df.apply(lambda x: (x * 100) / sum(x), axis=1)
  
# Plot stacked horizontal bar chart
percent_df.plot.barh(stacked=True,
                     title="Male-Female percentage composition of Cuisine preferences")

输出: