# 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 属性

# 另请参阅

scatter