# gscatter
分组散点图
函数库: TyStatistics
# 语法
h = gscatter(x,y,g)
h = gscatter(x,y,g,clr,sym,siz)
h = gscatter(x,y,g,clr,sym,siz,doleg)
h = gscatter(x,y,g,clr,sym,siz,doleg;Key=Value)
h = gscatter(ax,___)
# 说明
h = gscatter(x,y,g) 创建 x 和 y 的散点图,按 g 分组,并返回与 g 中的组对应的图形句柄。输入 x 和 y 是大小相同的向量。示例
h = gscatter(x,y,g,clr,sym,siz) 为每个组指定标记颜色 clr、符号 sym 和大小 siz。示例
h = gscatter(x,y,g,clr,sym,siz,doleg) 控制是否在图上显示图例。默认情况下 gscatter 会创建图例。
h = gscatter(x,y,g,clr,sym,siz,doleg;Key=Value) 使用由键值参数 Key, Value 指定的额外选项进行绘图。例如,您可以指定 x 轴和 y 轴标签。示例
h = gscatter(ax,___) 使用由坐标区对象 ax 指定的绘图坐标区。将 ax 指定为第一个输入参数,后跟先前语法中的任意输入参数组合。示例
您可以为 clr、sym 和 siz 传入 [],以使用其默认值。
# 示例
使用默认设置的散点图
加载 carsmall 数据集。
using TyMath
using TyStatistics
using TyPlot
include(pkgdir(TyStatistics)*"/data/PlotData/gscatter/carsmall.jl")
在 x 轴上绘制 Displacement 值,在 y 轴上绘制 Horsepower 值。gscatter 使用变量名称作为坐标轴的默认标签。按 Model_Year 对数据点分组。
gscatter(Displacement, Horsepower, Model_Year; xname="Displacement", yname="Horsepower")
带有一个分组变量的散点图
加载 discrim 数据集。
using TyMath
using TyStatistics
using TyPlot
include(pkgdir(TyStatistics)*"/data/PlotData/gscatter/discrim.jl")
该数据集包含基于气候、住房、教育和健康等九个方面的城市评分。矩阵 ratings 包含评分信息。
绘制矩阵 group 中按城市规模分组的气候评分(第一列)和住房评分(第二列)之间的关系。为每个组选择不同颜色和绘图符号。
gscatter(ratings[:,1],ratings[:,2],group,"br","xo")
xlabel("climate")
ylabel("housing")
带有多个分组变量的散点图
加载 hospital 数据集。
using TyMath
using TyStatistics
using TyPlot
include(pkgdir(TyStatistics)*"/data/PlotData/gscatter/hospital.jl")
绘制住院患者的年龄和体重。根据患者的性别和吸烟状况对其进行分组。用 o 符号表示非吸烟者,用 * 符号表示吸烟者。由于 hospital 数据集中的数据类型为分类数组,因此我们指定 sort 为 false。
x = hospital.Age
y = hospital.Weight
g = (hospital.Sex, hospital.Smoker)
gscatter(x, y, g, "rkgb", "o*", 8, true; xname="Age", yname="Weight", sort=false)
legend(; loc="northeast")
指定散点图的坐标区
加载 carsmall 数据集。创建一个包含两个子图的图窗,并以 ax1 和 ax2 形式返回 axes 对象。通过引用对应的 Axes 对象,在每个坐标区中创建一个散点图。在左侧子图中,使用 Model_Year 变量对数据进行分组。在右侧子图中,使用 Cylinders 变量对数据进行分组。通过将对应的 Axes 对象传递给 title 函数,为每个绘图添加标题。
using TyMath
using TyStatistics
using TyPlot
include(pkgdir(TyStatistics)*"/data/PlotData/gscatter/carsmall.jl")
color = [
0 0.447000000000000 0.741000000000000
0.850000000000000 0.325000000000000 0.0980000000000000
0.929000000000000 0.694000000000000 0.125000000000000
0.494000000000000 0.184000000000000 0.556000000000000
0.466000000000000 0.674000000000000 0.188000000000000
0.301000000000000 0.745000000000000 0.933000000000000
]
ax1 = subplot(1, 2, 1)
gscatter(ax1, Acceleration, MPG, Model_Year, color[1:3, :])
title(ax1, "Left Subplot (Model Year)")
ax2 = subplot(1, 2, 2)
gscatter(ax2, Acceleration, MPG, Cylinders, color[4:6, :])
title(ax2, "Right Subplot (Cylinders)")
指定标记颜色
使用由 hsv 函数确定的颜色图指定标记颜色。
对于激光雷达扫描数据集,该数据集包含一辆车周围对象的坐标,存储为三维点的集合。要突出显示该车辆周围的环境,请将感兴趣区域设置为车辆左右各 20 米、车辆前后各 20 米以及路面上方的区域。裁剪数据以仅包含指定区域内的点。使用具有两两距离的 dbscan 对数据进行聚类。加载聚类数据。
using TyMath
using TyStatistics
using TyPlot
include(pkgdir(TyStatistics)*"/data/PlotData/gscatter/lidar_subset.jl")
使用 gscatter 函数将生成的簇可视化为二维组散点图。默认情况下,gscatter 使用七种 MATLAB 默认颜色。如果唯一簇的数量超过七个,该函数将根据需要循环使用这些默认颜色。找出簇数,并使用 hsv 函数生成相应的颜色数。指定标记颜色以对每个簇使用唯一颜色。
numGroups = length(unique(idx))
clr = hsv(numGroups)
gscatter(loc[:, 1], loc[:, 2], idx, clr)
xlabel("x")
ylabel("y")
创建和修改散点图
加载 carbig 数据集。
using TyMath
using TyStatistics
using TyPlot
include(pkgdir(TyStatistics)*"/data/PlotData/gscatter/carbig.jl")
创建一个散点图,比较 Acceleration 和 MPG。根据 Origin 对数据点进行分组。
h = gscatter(Acceleration,MPG,Origin)
h = 7×1 Matrix{PyCall.PyObject}:
PyObject <objects.mw_line.CLine object at 0x00000212D222EAC8>
PyObject <objects.mw_line.CLine object at 0x000002130EE04CC8>
PyObject <objects.mw_line.CLine object at 0x000002130EE156C8>
PyObject <objects.mw_line.CLine object at 0x000002130EE1C508>
PyObject <objects.mw_line.CLine object at 0x000002130EE21908>
PyObject <objects.mw_line.CLine object at 0x000002130EE26C88>
PyObject <objects.mw_line.CLine object at 0x000002130EE29E48>
显示 Japan 组对应的 Line 对象。
jgroup = h[3]
jgroup = PyObject <objects.mw_line.CLine object at 0x000002130EE156C8>
将 Japan 组的标记颜色更改为黑色并更新图例。
jgroup.set_color("k")
legend()
# 输入参数
x — x 轴值数值向量
x 轴值,指定为数值向量。x 必须与 y 具有相同的大小。
y — y 轴值数值向量
y 轴值,指定为数值向量。y 必须与 x 具有相同的大小。
g — 分组变量数值向量 | 字符串向量
分组变量,指定为数值向量或字符串向量。g 也可以是包含若干分组变量的元组(如 (g1,g2,g3)),在这种情况下,所有分组变量的值相同的观测值都会放在同一个组中。同一组中的点以相同的标记颜色、符号和大小显示在散点图上。
g 中的行数必须等于 x 的长度。
示例: species
示例: (Cylinders,Origin)
clr — 标记颜色Syslab 默认颜色 (默认) | 由短颜色名称组成的字符串 | RGB 三元组矩阵
标记颜色,指定为由短颜色名称组成的字符向量或字符串标量或 RGB 三元组矩阵。
如果想自定义颜色,请指定一个 RGB 三元组矩阵。RGB 三元组是包含三个元素的行向量,其元素分别指定颜色中红、绿、蓝分量的强度。强度值必须位于 [0,1] 范围内,例如 [0.4 0.6 0.7]。
此外,还可以按名称指定一些常见的颜色。下表列出了命名颜色选项和等效的 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" | ![]() |
clr 的默认值为包含 Syslab 默认颜色的 RGB 三元组矩阵。
如果您没有为 g 中的所有唯一组指定足够多的颜色,则 gscatter 会循环使用 clr 中指定的值。如果在唯一组的数量超过默认颜色数量 (7) 时使用默认值,则 gscatter 会根据需要循环使用这些默认值。
示例: "rgb"
示例: [0 0 1; 0 0 0]
sym — 标记符号"." (默认) | 由符号组成的字符向量或字符串标量
标记符号,指定为由 plot 函数识别的符号组成的字符向量或字符串标量。下表列出了可用的标记符号。
| 值 | 描述 |
|---|---|
| "o" | 圆形 |
| "+" | 加号 |
| "*" | 星号 |
| "." | 点 |
| "x" | 叉号 |
| "s" | 正方形 |
| "d" | 菱形 |
| "^" | 上三角 |
| "v" | 下三角 |
| ">" | 右三角 |
| "<" | 左三角 |
| "p" | 五角星(五角形) |
| "h" | 六角星(六角形) |
| "none" | 无标记 |
如果没有为所有组指定足够多的值,则 gscatter 会根据需要循环使用指定的值。
示例: "o+*v"
siz — 标记大小正数值向量
标记大小,指定为以磅为单位的正数值向量。默认值由观测值的数目确定。如果没有为所有组指定足够多的值,则 gscatter 会根据需要循环使用指定的值。
示例: [6,12]
doleg — 包含图例的选项true (默认) | false
包含图例的选项,指定为 true 或 false。默认情况下,图例显示在图上。
ax — 绘图坐标区Axes 对象
绘图的坐标区,指定为 Axes 对象。如果未指定 ax,则 gscatter 使用当前坐标区创建绘图。
# 键-值参数
实现 Key1=Value1,...,KeyN=ValueN 功能的键-值参数,其中 Key 与 Value 相互对应。键-值参数必须在其余参数以及一个英文百分号以后,但是内部出现顺序不重要。
示例: xname="x", yname="y" 指定了 x 轴与 y 轴标签。
xnam — x 轴标签"x" (默认) | 字符串
x 轴标签,指定为字符串。
ynam — y 轴标签"y" (默认) | 字符串
y 轴标签,指定为字符串。
sort — 分组排序指示true (默认) | false
分组排序指示,指定为 true 或 false。默认情况下,gscatter 对于分组组名进行排序。
# 输出参数
h — 图形句柄Line 对象数组
图形句柄,以 Line 对象数组形式返回。每个 Line 对象对应于 g 中的组之一。您可以使用圆点表示法来查询和设置线条对象的属性。有关 Line 对象属性的列表,请参见 line 属性。


















