# bar
条形图
函数库: TyPlot
# 语法
bar(y)
bar(x,y)
bar(___,Key=Value)
bar(ax,___)
b = bar(___)
# 说明
bar(y) 创建一个条形图,y 中的每个元素对应一个条形。如果 y 是 m×n 矩阵,则 bar 创建每组包含 n 个条形的 m 个组。示例
bar(___,Key=Value) 使用一个或多个名称-值对组参数指定条形图的属性。仅使用默认"grouped"或"stacked"样式的条形图支持设置条形属性。在所有其他输入参数之后指定名称-值对组参数。有关属性列表,请参阅 bar 属性。示例
bar(ax,___) 将图形绘制到 ax 指定的坐标区中,而不是当前坐标区(gca)中。选项 ax 可以位于前面的语法中的任何输入参数组合之前。示例
b = bar(___) 返回一个或多个 CBar 对象。如果 y 是向量,则 bar 将创建一个 CBar 对象。如果 y 是矩阵,则 bar 为每个序列返回一个 CBar 对象。显示条形图后,使用 b 设置条形的属性。示例
# 示例
创建条形图
using TyPlot
y = [75 91 105 123.5 131 150 179 203 226 249 281.5]
bar(y)

指定条形位置
指定沿 x 轴的条形位置。
using TyPlot
x = 1900:10:2000
y = [75, 91, 105, 123.5, 131, 150, 179, 203, 226, 249, 281.5]
bar(x,y)

指定条形宽度
将各条形的宽度设置为各条形可用总空间的 40%。
using TyPlot
y = [75, 91, 105, 123.5, 131, 150, 179, 203, 226, 249, 281.5]
bar(y, width = 0.4)

显示条形组
显示四个条形组,每一组包含三个条形。
using TyPlot
y = [2 2 3; 2 5 6; 2 8 9; 2 11 12]
bar(y)

显示堆叠条形图
为矩阵中的每一行显示一个条形。每个条形的高度是行中各元素之和。
using TyPlot
y = [2 2 3; 2 5 6; 2 8 9; 2 11 12]
bar(y, style = "stacked")

显示具有负数据的堆叠条形
将 x 定义为一个包含三个年份值的向量。将 y 定义为包含负值和正值组合的矩阵。在条形图中显示这些值。
using TyPlot
x = [1980, 1990, 2000]
y = [15 20 -5; 10 -17 21; -10 5 15]
bar(x, y, style = "stacked")

指定分类数据
指示条形图类别的一种方法是将 X 指定为分类数组。bar 函数使用经过排序的类别列表,因此条形的显示顺序可能与您预期的有所不同。
将 X 定义为分类数组,然后将 Y 定义为条形高度向量,并显示条形图。
using TyPlot
x = ["Small","Medium","Large","Extra Large"]
y = [10, 21, 33, 52]
bar(x, y)

在条形末端指定标签
将 vals 定义为一个包含两个数据集的值的矩阵。在条形图中显示值,并指定输出参数。由于有两个数据集,bar 返回包含两个 CBar 对象的向量。
using TyPlot
x = [1, 2, 3]
vals = [2 11; 3 23; 6 26]
b = bar(x,vals)
接下来,在条形序列的末端上方显示值。
x = [1, 2, 3]
vals = [2 11; 3 23; 6 26]
b = bar(x,vals, text = vals)

为条形图指定坐标区
调用 subplot 函数以创建一个 2×1 分块图布局和一个坐标区对象,并将该对象返回为 ax1和 ax2。在顶部坐标区中显示条形图。在底部坐标区中,显示相同数据的堆叠条形图。
using TyPlot
y = [1 2 3; 4 5 6]
ax1 = subplot(2,1,1)
ax2 = subplot(2,1,2)
b1 = bar(ax1, y)
b2 = bar(ax2, y, style = "stacked")

指定条形颜色
使用红色条形创建一个条形图。
using TyPlot
y = [75, 91, 105, 123.5, 131, 150, 179, 203, 226, 249, 281.5]
bar(y, color = "r")

指定条形和轮廓颜色
使用 RGB 三元组设置条形内部颜色和轮廓颜色。设置条形轮廓的宽度。
using TyPlot
y = [75, 91, 105, 123.5, 131, 150, 179, 203, 226, 249, 281.5]
bar(y, facecolor = (0,0.5,0.5), edgecolor = (0,0.9,0.9), linewidth = 1.5)

控制单个条形的颜色
可以使用 CBar 对象的 CData 属性控制单个条形的颜色。
创建一个条形图并将 CBar 对象赋给一个变量。默认情况下,CData 属性预先填充由默认 RGB 颜色值组成的矩阵。要更改特定的颜色,请更改矩阵中的对应行。例如,更改第二个条形的颜色。
using TyPlot
y = [
0.8147
0.9058
0.1270
0.9134
0.6324
0.0975
0.2785
0.5469
0.9575
0.9649
]
b, = bar(y; facecolor="flat")
b.set_cdata(2, [0.5 0 0.5])

使用颜色图颜色的条形图
using TyPlot
c = [
0.2422 0.1504 0.6603
0.0704 0.7457 0.7258
0.9769 0.9839 0.0805
]
y = [1 3 5; 3 2 7; 3 4 2];
b = bar(y; facecolor="flat");
for k in 1:size(y, 2)
b[k].set_cdata(c[k, :])
end

自定义分组或堆叠条形中的一个序列
创建矩阵 y,其中每列为一个数据序列。调用 bar 函数以在条形图中显示数据,并指定输出参数。输出是包含三个 CBar 对象的向量,其中每个对象对应一个不同序列。无论条形是分组还是堆叠,均为如此。
using TyPlot
y = [10 15 20; 30 35 40; 50 55 62];
b = bar(y);
将第三个条形序列设置为绿色。
b[3].set_facecolor([0.2, 0.6, 0.5])

# 输入参数
x - x 坐标标量 | 向量 | 矩阵
x 坐标,指定为标量、向量或矩阵。x 的值不需要按顺序排列,但 x 的大小取决于 y 的大小以及您要如何显示数据。下表说明了最常见的情况。
| 表示形式 | 如何指定 X 和 Y | 示例 |
|---|---|---|
| 显示一个条形序列。 | 指定 x 和 y 为相同长度的向量。x 中的值必须唯一,但 y 中的值不需要唯一。 | x = [1980 1990 2000]; y = [10 20 30]; bar(x,y) ![]() |
| 分组显示多个条形序列。 | 指将 x 指定为唯一值的向量,并将 y 指定为矩阵。x 的长度必须等于 y 的至少一个维度的长度。y 的另一个维度包含不同条形序列的值。 | x = [1980 1990]; y = [2 6 9;11 22 32]; bar(x,y) ![]() |
数据类型: Int16 | Int32 | Int64 | Float16 | Float32 | Float64 | DateTime
y - y 坐标标量 | 向量 | 矩阵
y 坐标,指定为标量、向量或矩阵。y 的大小取决于 x 的大小以及您要如何显示数据。下表说明了最常见的情况。
| 表示形式 | 如何指定 X 和 Y | 示例 |
|---|---|---|
| 显示一个条形序列。 | 指定 x 和 y 为相同长度的向量。x 中的值必须唯一,但 y 中的值不需要唯一。 | x = [1980 1990 2000]; y = [10 20 30]; bar(x,y) ![]() |
| 分组显示多个条形序列。 | 指将 x 指定为唯一值的向量,并将 y 指定为矩阵。x 的长度必须等于 y 的至少一个维度的长度。y 的另一个维度包含不同条形序列的值。 | x = [1980 1990]; y = [2 6 9;11 22 32]; bar(x,y) ![]() |
数据类型: Int16 | Int32 | Int64 | Float16 | Float32 | Float64
ax - 坐标区对象坐标区对象
坐标区对象。如果您不指定坐标区,则 bar 使用条形图的当前坐标区。
# 名称-值对组参数
指定可选的、以逗号分隔的 Key=Value 对组参数。Key 为参数名称,Value 为对应的值。您可采用任意顺序指定多个名称-值对组参数,如 Key1=Value1,...,KeyN=ValueN 所示。
示例: bar([10,20,30], edgecolor = "g") 将围绕条形的轮廓指定为绿色。
此处所列的 bar 属性只是一部分。有关属性列表,请参阅 bar 属性
注意
- 此处所列的属性只是一部分;有关属性列表,请参阅 bar 属性;
- 您只能在使用默认 "grouped" 或 "stacked" 样式的条形图上设置这些属性。
width - 条形宽度0.8 (默认) | 标量
条形宽度,指定为可用于每个条形的总空间的一部分。默认值 0.8 表示条形宽度是从上一条形到下一条形之间的空间的 80%,两端各占该空间的 10%。
如果宽度为 1,则组中的条形紧挨在一起。
示例: bar([1 2 3],width = 0.5) 创建使用 50% 可用空间的条形。
数据类型: Int16 | Int32 | Int64 | Float16 | Float32 | Float64
style - 组样式"grouped" (默认) | "stacked"
组样式,使用下列值之一指定。
| 样式 | 结果 | 示例 |
|---|---|---|
| "grouped" | 将每组显示为以对应的 x 值为中心的相邻条形。 | ![]() |
| "stacked" | 将每组显示为一个多色条形。条形的长度是组中各元素之和。如果 y 是向量,则结果与 "grouped" 相同。 | ![]() |
labels - 图例nothing(默认) | 字符串标量
labels 图例,默认为 nothing,使用默认数据 data1,data2 标记图形对象。如果设置了图例则以图例内容标记图形对象。
edgecolor - 轮廓颜色RGB 三元组 | 十六进制颜色代码 | "r" | "g" | "b" | ...
轮廓颜色,指定为 RGB 三元组、十六进制颜色代码、颜色名称或短名称。如果有 150 个条形或更少,则默认值为 [0,0,0],对应于黑色。
对于自定义颜色,请指定 RGB 三元组或十六进制颜色代码。
- RGB 三元组是包含三个元素的行向量,其元素分别指定颜色中红、绿、蓝分量的强度。强度值必须位于 [0,1] 范围内,例如 [0.4,0.6,0.7];
- 十六进制颜色代码是字符向量或字符串标量,以井号 (#) 开头,后跟三个或六个十六进制数字,范围可以是 0 到 F。这些值不区分大小写。因此,颜色代码 "#FF8800" 与 "#ff8800"、"#F80" 与 "#f80" 是等效的。
此外,还可以按名称指定一些常见的颜色。下表列出了命名颜色选项、等效 RGB 三元组和十六进制颜色代码。
| 颜色名称 | 短名称 | RGB 三元组 | 十六进制颜色代码 | 外观 |
|---|---|---|---|---|
| "red" | "r" | [1, 0, 0] | "#FF0000" | ![]() |
| "green" | 不适用 | [0, 0.5019607843137255, 0] | "#008000" | ![]() |
| 不适用 | "g" | [0, 0.5, 0] | "#007F00" | ![]() |
| 不适用 | 不适用 | [0, 1, 0] | "#00FF00" | ![]() |
| "blue" | "b" | [0, 0, 1] | "#0000FF" | ![]() |
| "cyan" | 不适用 | [0, 1, 1] | "#00FFFF" | ![]() |
| 不适用 | "c" | [0, 0.75, 0.75] | "#00BFBF" | ![]() |
| "magenta" | 不适用 | [1, 0, 1] | "#FF00FF" | ![]() |
| 不适用 | "m" | [0.75, 0, 0.75] | "#BF00BF" | ![]() |
| "yellow" | 不适用 | [1, 1, 0] | "#FFFF00" | ![]() |
| 不适用 | "y" | [0.75, 0.75, 0] | "#BFBF00" | ![]() |
| "black" | "k" | [0, 0, 0] | "#000000" | ![]() |
| "white" | "w" | [1, 1, 1] | "#FFFFFF" | ![]() |
| "none" | 不适用 | 不适用 | 不适用 | 无颜色 |
以下是 Syslab 在许多类型的绘图中使用的默认颜色的 RGB 三元组和十六进制颜色代码。
| RGB 三元组 | 十六进制颜色代码 | 外观 |
|---|---|---|
| [0, 0.4470, 0.7410] | "#0072BD" | ![]() |
| [0.8500, 0.3250, 0.0980] | "#D95319" | ![]() |
| [0.9290, 0.6940, 0.1250] | "#EDB120" | ![]() |
| [0.4940, 0.1840, 0.5560] | "#7E2F8E" | ![]() |
| [0.4660, 0.6740, 0.1880] | "#77AC30" | ![]() |
| [0.3010, 0.7450, 0.9330] | "#4DBEEE" | ![]() |
| [0.6350, 0.0780, 0.1840] | "#A2142F" | ![]() |
示例: b = bar(1:10, edgecolor="red")
示例: b = bar(1:10, edgecolor=[1, 0, 1])
示例: b = bar(1:10, edgecolor="#7E2F8E")
facecolor - 填充颜色RGB 三元组 | 十六进制颜色代码 | 颜色名称 | "r" | "g" | "b" | ...
填充颜色,指定为 RGB 三元组、十六进制颜色代码、颜色名称或短名称。
对于自定义颜色,请指定 RGB 三元组或十六进制颜色代码。
- RGB 三元组是包含三个元素的行向量,其元素分别指定颜色中红、绿、蓝分量的强度。强度值必须位于 [0,1] 范围内,例如 [0.4,0.6,0.7];
- 十六进制颜色代码是字符向量或字符串标量,以井号 (#) 开头,后跟三个或六个十六进制数字,范围可以是 0 到 F。这些值不区分大小写。因此,颜色代码 "#FF8800" 与 "#ff8800"、"#F80" 与 "#f80" 是等效的。
此外,还可以按名称指定一些常见的颜色。下表列出了命名颜色选项、等效 RGB 三元组和十六进制颜色代码。
| 颜色名称 | 短名称 | RGB 三元组 | 十六进制颜色代码 | 外观 |
|---|---|---|---|---|
| "red" | "r" | [1, 0, 0] | "#FF0000" | ![]() |
| "green" | 不适用 | [0, 0.5019607843137255, 0] | "#008000" | ![]() |
| 不适用 | "g" | [0, 0.5, 0] | "#007F00" | ![]() |
| 不适用 | 不适用 | [0, 1, 0] | "#00FF00" | ![]() |
| "blue" | "b" | [0, 0, 1] | "#0000FF" | ![]() |
| "cyan" | 不适用 | [0, 1, 1] | "#00FFFF" | ![]() |
| 不适用 | "c" | [0, 0.75, 0.75] | "#00BFBF" | ![]() |
| "magenta" | 不适用 | [1, 0, 1] | "#FF00FF" | ![]() |
| 不适用 | "m" | [0.75, 0, 0.75] | "#BF00BF" | ![]() |
| "yellow" | 不适用 | [1, 1, 0] | "#FFFF00" | ![]() |
| 不适用 | "y" | [0.75, 0.75, 0] | "#BFBF00" | ![]() |
| "black" | "k" | [0, 0, 0] | "#000000" | ![]() |
| "white" | "w" | [1, 1, 1] | "#FFFFFF" | ![]() |
| "none" | 不适用 | 不适用 | 不适用 | 无颜色 |
以下是 Syslab 在许多类型的绘图中使用的默认颜色的 RGB 三元组和十六进制颜色代码。
| RGB 三元组 | 十六进制颜色代码 | 外观 |
|---|---|---|
| [0, 0.4470, 0.7410] | "#0072BD" | ![]() |
| [0.8500, 0.3250, 0.0980] | "#D95319" | ![]() |
| [0.9290, 0.6940, 0.1250] | "#EDB120" | ![]() |
| [0.4940, 0.1840, 0.5560] | "#7E2F8E" | ![]() |
| [0.4660, 0.6740, 0.1880] | "#77AC30" | ![]() |
| [0.3010, 0.7450, 0.9330] | "#4DBEEE" | ![]() |
| [0.6350, 0.0780, 0.1840] | "#A2142F" | ![]() |
示例: b = bar(1:10, facecolor="red")
示例: b = bar(1:10, facecolor=[1, 1, 0])
示例: b = bar(1:10, facecolor="#FF00FF")
edgealpha - 边透明度1 (默认) | 介于 0 和 1(包括二者)之间的标量值
边透明度,指定为介于 0 和 1(包含这两个边界值)之间的标量值。值 1 表示完全不透明,0 则表示完全透明(不可见)。
facealpha - 面透明度1 (默认) | 介于 0 和 1(包括二者)之间的标量值
面透明度,指定为介于 0 和 1(包含这两个边界值)之间的标量值。值 1 表示完全不透明,0 则表示完全透明(不可见)。
cdata - 颜色数据RGB 三元组 | 三列矩阵 | 标量 | 向量
颜色数据,指定为下列值之一:
RGB 三元组 —— 对所有条形应用同一个 RGB 颜色值;
三列矩阵 —— 每个条形一种颜色。矩阵中的每一行指定一个特定条形的 RGB 三元组;
标量 —— 对所有条形应用颜色图中的一种颜色;
向量 —— 每个条形一种颜色。颜色来自颜色图。
默认情况下,当您创建条形图时,cdata 属性包含一个由 RGB 三元组组成的三列矩阵。通过更改矩阵中的对应行,可以更改特定条形的颜色。
仅当 facecolor 或 edgeColor 属性设置为 "flat" 时,此属性才适用。
示例
通过将 faceColor 属性设置为 "flat",更改特定条形的颜色。然后将 cdata 矩阵中的对应行更改为新的 RGB 三元组。例如,更改第二个条形的颜色。
using TyPlot
b, = bar(1:10, facecolor = "flat");
b.set_cdata(2, [0, 0.8, 0.8]);

basevalue - 基准值0 (默认) | 数值标量值
基准值,指定为数值标量值。
您指定的基准值将根据条形图的方向应用于 x 轴或 y 轴。如果您将条形图的方向由垂直更改为水平(或反之),基准值可能会改变。
linestyle - 条形轮廓的线型"-" (默认) | "--" | ":" | "-." | "none"
条形轮廓的线型,指定为此表中的线型之一。
| 线型 | 说明 | 表示的线条 |
|---|---|---|
| "-" | 实线 | ![]() |
| "--" | 虚线 | ![]() |
| ":" | 点线 | ![]() |
| "-." | 点划线 | ![]() |
| "none" | 无线条 | 无线条 |
linewidth - 条形轮廓的宽度0.5 (默认) | 正值
条形轮廓的宽度,指定为以磅为单位的正值。一磅等于 1/72 英寸。
示例: b = bar(1:10, facecolor="#FF00FF", linewidth=1.5)
数据类型: Int16 | Int32 | Int64 | Float16 | Float32 | Float64
# 输出参数
b - CBar 对象CBar 对象
CBar 对象。在创建具体的 CBar 对象后,可使用 b 中的元素访问和修改对象属性。CBar 对象的数量取决于 y 的大小。如果 y 是向量,则 b 是一个 CBar 对象。如果 y 是矩阵,则 b 是向量,其中包含的每个 CBar 对象都对应于 y 中一个序列。
示例: 使用 plt_get 函数获取条形图属性:
plt_get(b,"linewidth") 获取条形图对象的线宽;
plt_get(b,"facecolor") 获取条形图对象的颜色。
示例: 使用 plt_set 函数设置条形图属性:
plt_set(b,"linewidth",3) 设置条形图对象的线宽;
plt_set(b,"facecolor","r") 设置条形图对象的颜色。
# 版本历史记录
在 2023a 之前推出
2025a SP3:不支持对返回值图形对象取下标
返回值图形对象不再支持取下标。在以前的版本中,可以对返回值对象取下标,获取下标对应的单个条形,从而可以设置该单个条形的属性。例如:
b, = bar(1:10)
b[2].set_facecolor([1 0 0])
从 2025a SP3 开始,对返回值图形对象取下标会导致报错。在这种情况下,您需要通过 set_cdata 函数修改图形对象的 cdata 属性 来修改指定条形的颜色。通过输入要修改的条形序列号和颜色,可以更改指定条形的颜色。仅当 facecolor 或 edgecolor 属性设置为 "flat",cdata 才适用。例如:
b, = bar(1:10)
b.set_facecolor("flat")
b.set_cdata(2, [1 0 0])
# 另请参阅
# 函数
bar3 | bar3h | barh | histogram | hold | stairs


























