matplotlib.pyplot.grouped_bar#
- matplotlib.pyplot.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'])
- 参数:
- heights类数组列表、类数组字典、二维数组或 pandas.DataFrame
所有 x 轴和分组的高度。必须满足以下形式之一:
类数组列表:数据集列表,每个数据集必须具有相同数量的元素。
# 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])
类数组字典:从名称到数据集的映射。每个数据集(字典的值)必须具有相同数量的元素。
调用示例
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_spacing浮点数,默认:1.5
两个柱形组之间的间距,以柱宽为单位。
默认值 1.5 意味着柱形组之间存在 1.5 倍柱宽的间隙。
- bar_spacing浮点数,默认: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_bar与bar和boxplot的 API。与 bar() 的比较
grouped_bar在某些方面有意偏离了barAPI。bar(x, y)是一个底层 API,它在明确的位置 x 放置高度为 y 的柱形。它还允许指定单个柱形的宽度和颜色。这种详细的控制和灵活性在绘制多数据集的分组柱状图时难以管理且通常是不必要的。因此,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=...)