matplotlib.axes.Axes.grouped_bar#
- Axes.grouped_bar(heights, *, positions=None, group_spacing=1.5, bar_spacing=0, tick_labels=None, labels=None, orientation='vertical', colors=None, **kwargs)[source]#
绘制分组柱状图。
版本 3.11 新增:该 API 尚处于试用阶段。我们可能会根据用户反馈对某些方面进行微调。
分组柱状图用于可视化一系列分类数据集。数据集中的每个值都属于一个特定的类别,且这些类别在所有数据集中是相同的。类别通常具有字符串名称,也可以是日期或索引键。每个数据集中的值由一组相同颜色的柱状图表示。所有数据集的柱状图按其共享的类别进行分组。类别名称作为每个柱状图组的刻度标签绘制。每个数据集都有独特的柱状图颜色,并且可以选择性地获取一个用于图例的标签。
示例
grouped_bar([dataset_0, dataset_1, dataset_2], tick_labels=['A', 'B'], labels=['dataset 0', 'dataset 1', 'dataset 2'])
- 参数:
- heightsarray-like 列表,或 array-like 字典,或二维数组,或 pandas.DataFrame
所有 x 轴和分组的高度。为以下类型之一:
array-like 列表:数据集列表,每个数据集必须具有相同数量的元素。
# category_A, category_B dataset_0 = [value_0_A, value_0_B] dataset_1 = [value_1_A, value_1_B] dataset_2 = [value_2_A, value_2_B]
示例调用
grouped_bar([dataset_0, dataset_1, dataset_2])
array-like 字典:从名称到数据集的映射。每个数据集(字典值)必须具有相同数量的元素。
示例调用
data_dict = {'ds0': dataset_0, 'ds1': dataset_1, 'ds2': dataset_2} grouped_bar(data_dict)
这些名称被用作 labels(标签),即这等同于
grouped_bar(data_dict.values(), labels=data_dict.keys())
使用字典输入时,不能显式传递 labels 参数。
二维数组:行表示类别,列表示不同的数据集。
dataset_0 dataset_1 dataset_2 category_A ds0_a ds1_a ds2_a category_B ds0_b ds1_b ds2_b
示例调用
categories = ["A", "B"] dataset_labels = ["dataset_0", "dataset_1", "dataset_2"] array = np.random.random((2, 3)) grouped_bar(array, tick_labels=categories, labels=dataset_labels)
一个
pandas.DataFrame。索引(index)用于类别,列(columns)用于数据集。
df = pd.DataFrame( np.random.random((2, 3)), index=["A", "B"], columns=["dataset_0", "dataset_1", "dataset_2"] ) grouped_bar(df)
即这等同于
grouped_bar(df.to_numpy(), tick_labels=df.index, labels=df.columns)
注意:
grouped_bar(df)生成的图表结构与df.plot.bar()等效。
- positions类数组,可选
柱状图组的中心位置。这些值必须等距。如果未提供,则使用整数序列 0, 1, 2, ...。
- tick_labels字符串列表,可选
类别标签,放置在柱状图组中心 positions 的刻度上。如果未设置,则坐标轴刻度(位置和标签)保持不变。
- labels字符串列表, 可选
数据集的标签,即同一组内的柱状图标签。这些将显示在图例中。
- group_spacingfloat,默认值:1.5
两个柱状图组之间的间距,以柱宽为单位。
默认值 1.5 表示柱状图组之间有 1.5 倍柱宽的间隙。
- bar_spacingfloat,默认值:0
柱状图之间的间距,以柱宽为单位。
- orientation{"vertical", "horizontal"},默认:"vertical"
柱状图的方向。
- colors颜色列表,可选
一组颜色序列,用于循环使用并为不同数据集的柱状图着色。该序列的长度不必与所提供 y 数据的数量完全一致,在这种情况下,颜色将从头开始循环重复。
如果未指定,将使用 Axes 属性循环中的颜色。
- **kwargs
Rectangle属性 应用于所有柱状图的属性。以下属性还接受与 heights 中数据集相对应的数值序列
edgecolor
facecolor
linewidth
linestyle
hatch
属性
描述
一个过滤函数,它接受一个 (m, n, 3) 浮点数组和一个 dpi 值,并返回一个 (m, n, 3) 数组以及图像左下角的两个偏移量
浮点数或 None
未知
布尔值
布尔值或 None
(左,下,宽,高)
CapStyle或 {'butt', 'projecting', 'round'}BboxBase或 None布尔值
Patch 或 (Path, Transform) 或 None
颜色 或 None
颜色 或 None
颜色 或 None
布尔值
str
{'/', '\', '|', '-', '+', 'x', 'o', 'O', '.', '*'}
未知
color 或 'edge' 或 None
未知
布尔值
JoinStyle或 {'miter', 'round', 'bevel'}object
{'-', '--', '-.', ':', '', ...} 或 (offset, on-off-seq)
浮点数或 None
布尔值
None 或 布尔值 或 浮点数 或 可调用对象
布尔值
(scale: 浮点数, length: 浮点数, randomness: 浮点数)
布尔值或 None
str
布尔值
未知
未知
(浮点数, 浮点数)
未知
浮点数
- 返回:
- _GroupedBarReturn
一个暂定的结果对象。未来会进行完善。目前,返回对象的保证 API 仅限于
bar_containers属性,它是一个BarContainer列表,即每个数据集对应bar调用的结果。一个
remove()方法,用于从坐标轴中移除所有柱状图。参见Artist.remove()。
另请参阅
bar一种用于柱状图的底层 API,具有更多自由度,例如可以设置单个柱状图的大小和颜色。
备注
为了更好地理解,我们将
grouped_barAPI 与bar和boxplot进行比较。与 bar() 的比较
grouped_bar在某些方面有意偏离了barAPI。bar(x, y)是一个底层 API,它将高度为 y 的柱状图放置在明确的 x 位置上。它还允许指定单个柱状图的宽度和颜色。这种详细的控制和灵活性在将多个数据集绘制为分组柱状图时难以管理且通常是不必要的。因此,grouped_bar专注于将柱状图抽象为分类数据的可视化工具。以下示例有助于从
bar过渡到grouped_bar。由于采用了分类处理,位置被弱化了,默认使用整数值。如果你之前使用
range(N)作为位置,现在可以省略该值。bar(range(N), heights) grouped_bar([heights])
如果需要,可以作为关键字参数传递位置。
bar(x, heights) grouped_bar([heights], positions=x)
要在
bar中放置类别标签,可以使用 tick_label 参数或使用类别名称列表作为 x。grouped_bar则通过 tick_labels 参数来预期这些标签。bar(range(N), heights, tick_label=["A", "B"]) bar(["A", "B"], heights) grouped_bar([heights], tick_labels=["A", "B"])
显示在图例中的数据集标签仍然通过 label 参数传递。
bar(..., label="dataset") grouped_bar(..., label=["dataset"])
与 boxplot() 的比较
grouped_bar和boxplot都可视化来自多个数据集的分类数据。tick_labels 和 positions 的基础 API 是相同的,因此您可以轻松地在将所有单个值绘制为grouped_bar,或者绘制为每个类别的统计分布boxplot之间进行切换。grouped_bar(values, positions=..., tick_labels=...) boxplot(values, positions=..., tick_labels=...)