使用 Pandas 创建水平条形图
先决条件:熊猫
条形图将具有相应数据值的分类数据表示为矩形条。通常,x 轴代表分类值,y 轴代表数据值或频率。这称为垂直条形图,反之称为水平条形图。在某些情况下,水平条形图提供更好的可读性。
Python有各种可视化库,例如 Matplotlib 和 Seaborn。 Pandas 库与 Matplotlib 紧密集成,允许通过 DataFrame 和 Series 对象直接创建绘图。本文探讨了使用 Pandas 创建水平条形图的方法。
使用绘图实例 在 Pandas DataFrame 中,可以创建各种图形,包括条形图。有两种表示复杂类别的条形图:
- 分组或复合条形图– 当您有一个主类别的子类别时,此图表会在相应类别中为每个变量或子类别分配一个单独的条形。
- 堆叠条形图– 当您有一个主类别的子类别时,此图表会将子类别堆叠在一起以生成单个条形图。
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")
输出: