如果您从 R 中使用 igraph,请使用此选项
绘制图 {igraph} | R 文档 |
本手册页讨论了三个绘图函数 plot.igraph
、tkplot
和 rglplot
的共同部分
igraph 包中目前有三个不同的函数可以以各种方式绘制图
plot.igraph
对 R 设备进行简单的非交互式 2D 绘图。实际上,它是 plot
泛型函数的实现,因此您可以编写 plot(graph)
而不是 plot.igraph(graph)
。由于它使用了标准的 R 设备,因此它支持 R 具有输出设备的每种输出格式。该列表非常令人印象深刻:PostScript、PDF 文件、XFig 文件、SVG 文件、JPG、PNG,当然您也可以使用默认设备或美观的抗锯齿 Cairo 设备绘制到屏幕。有关更多信息,请参阅 plot.igraph
。
tkplot
使用 tcltk
包进行交互式 2D 绘图。它只能处理中等大小的图,一千个顶点可能已经太多了。在发出 tkplot
命令后,可以交互地更改绘制图的一些参数:顶点的位置、颜色和大小以及边的颜色和宽度。有关详细信息,请参阅 tkplot
。
rglplot
是一个实验性函数,用于使用 OpenGL 在 3D 中绘制图。有关更多信息,请参阅 rglplot
。
另请检查下面的示例。
有三种方法可以为下面“参数”部分中描述的参数赋值。我们按优先级顺序给出这三种方法。
第一种方法是向绘图命令提供命名参数:plot.igraph
、tkplot
或 rglplot
。顶点的参数以“vertex.
”为前缀,边的参数以“edge.
”为前缀,全局参数没有前缀。例如,可以通过参数 vertex.color
给定顶点的颜色,而 edge.color
设置边的颜色。layout
给定图的布局。
第二种方法是将顶点、边和图属性分配给图。这些属性没有前缀,即顶点的颜色取自 color
顶点属性,边的颜色取自 color
边属性。图的布局由 layout
图属性给出。(始终假设不存在相应的命令参数。)如果要为图分配给定的“外观”,设置顶点和边属性非常方便,属性会与图一起保存,如果您使用 save
保存图,或者以 GraphML 格式使用 write_graph
保存图,那么图在再次加载后将具有相同的外观。
如果未在命令行中给出参数,并且相应的顶点/边/图属性也缺失,则还会检查由 igraph_options
处理的常规 igraph 参数。顶点参数以“vertex.
”为前缀,边参数以“edge.
”为前缀,诸如 layout
之类的常规参数以“plot
”为前缀。如果您希望所有或大多数图具有相同的外观、顶点大小、顶点颜色等,这些参数非常有用。那么您无需在每次绘图时都设置这些参数,也无需为每个图分配顶点/边属性。
如果此处描述的三种方式均未指定参数的值,则使用其默认值,如源代码中所给出的。
不同的参数可以具有不同的类型,例如,顶点颜色可以作为带有颜色名称的字符向量给出,或者作为带有当前调色板中颜色编号的整数向量给出。不同的类型对于不同的参数有效,这将在下一节中详细讨论。然而,始终为真的是,参数始终可以是函数对象,在该函数对象中,将使用图作为其单个参数来调用该函数对象,以获取参数的“适当”值。(如果该函数返回另一个函数对象,则不会再次调用该函数对象……)
首先是顶点参数,请注意,如果它们用作参数或通过 igraph_options
设置,则需要添加“vertex.
”前缀。参数的值可以是对于每个顶点都有效的标量,也可以是对于每个顶点都有单独值的向量。(较短的向量会被循环使用。)
顶点的大小,数值标量或向量,在后一种情况下,每个顶点的大小可能不同。调整此顶点大小,以便对于所有三个绘图命令的给定值,顶点的大小大致相同。它不需要是整数。
默认值为 15。这足以在顶点上放置短标签。
顶点的“另一个”大小,对于某些顶点形状。对于各种矩形形状,这给出了顶点的高度,而 size
给出了宽度。对于可以使用单个数字指定大小的形状,则忽略它。
默认值为 15。
顶点的填充颜色。如果它是数值,则使用当前调色板,请参阅 palette
。如果它是字符向量,那么它可以包含整数值、命名颜色或具有三个或四个字节的 RGB 指定颜色。所有以“#
”开头的字符串都被假定为 RGB 颜色规范。可以混合命名颜色和 RGB 颜色。请注意,tkplot
忽略 RGB 颜色规范中的第四个字节(alpha 通道)。
对于 plot.igraph
和整数值,使用默认的 igraph 调色板(请参阅下面的“palette”参数)。请注意,这与 R 调色板不同。
如果您不希望(某些)顶点具有任何颜色,请提供 NA
作为颜色名称。
默认值为“SkyBlue2
”。
顶点框架的颜色,允许与填充颜色相同的格式。
如果您不希望顶点具有框架,请提供 NA
作为颜色名称。
默认情况下,它是“black”。
顶点框架的宽度。
默认值为 1。
顶点的形状,目前“circle
”、“square
”、“csquare
”、“rectangle
”、“crectangle
”、“vrectangle
”、“pie
”(请参阅 vertex.shape.pie)、“sphere
”和“none
”受到支持,并且仅受 plot.igraph
命令支持。“none
”根本不绘制顶点,尽管会绘制顶点标签(如果给定)。有关顶点形状的详细信息,请参阅 shapes
,有关使用饼图作为顶点的详细信息,请参阅 vertex.shape.pie
。
“sphere
”顶点形状将顶点绘制为给定颜色和大小的 3D 光线追踪球体。这会生成栅格图像,并且仅受某些图形设备支持。在某些设备上,不支持栅格透明度,并且球体没有透明背景。请参阅 dev.capabilities
和“rasterImage
”功能以检查您的设备是否受支持。
默认情况下,顶点绘制为圆形。
顶点标签。它们将被转换为字符。指定 NA
以省略顶点标签。
默认顶点标签是顶点 ID。
用于顶点标签的字体系列。由于不同的绘图命令可以使用不同的字体,因此它们以不同的方式解释此参数。然而,基本表示法被 plot.igraph
和 tkplot
理解。rglplot
现在根本不支持字体,它完全忽略此参数。
对于 plot.igraph
,此参数仅作为参数 family
传递给 text
。
对于 tkplot
,会执行一些转换。如果此参数是现有 Tk 字体的名称,那么将使用该字体,并且完全忽略 label.font
和 label.cex
参数。如果它是基本系列(serif、sans、mono)之一,那么将使用 Times、Helvetica 或 Courier 字体,这些字体保证在所有系统上都存在。对于“symbol”基本系列,如果符号字体可用,我们将使用符号字体,否则使用名称中带有“symbol”的第一个字体。如果该参数不是基本系列的名称,也不是命名的 Tk 字体,那么我们会将其传递给 tkfont.create
,并希望用户知道自己在做什么。在这种情况下,label.font
和 label.cex
参数也会传递给 tkfont.create
。
默认值为“serif”。
要在字体系列中用于顶点标签的字体。它的解释方式与 font
图形参数相同:1 是纯文本,2 是粗体,3 是斜体,4 是粗体和斜体,5 指定符号字体。
对于 plot.igraph
,此参数仅传递给 text
。
对于 tkplot
,如果 label.family
参数不是 Tk 字体的名称,那么此参数用于设置新创建的字体是否应为斜体和/或粗体。否则将被忽略。
对于 rglplot
,它将被忽略。
默认值为 1。
顶点标签的字体大小。它被解释为某些设备相关的基本字体大小的乘法因子。
对于 plot.igraph
,它仅作为参数 cex
传递给 text
。
对于 tkplot
,它乘以 12,然后用作 tkfont.create
的 size
参数。因此,对于 tkplot,基本字体为 12。
对于 rglplot
,它将被忽略。
默认值为 1。
标签与顶点中心的距离。如果它是 0,那么标签位于顶点中心。如果它是 1,那么标签显示在顶点旁边。
默认值为 0。
它定义了顶点标签相对于顶点中心的位置。它被解释为弧度角,零表示“向右”,“pi
”表示向左,向上为 -pi/2
,向下为 pi/2
。
默认值为 -pi/4
。
标签的颜色,有关可能的值,请参阅前面讨论的 color
顶点参数。
默认值为 black
。
边参数需要在用作参数或由 igraph_options
设置时添加“edge.
”前缀。边参数
边的颜色,有关可能的值,请参阅 color
顶点参数。
默认情况下,此参数为 darkgrey
。
边的宽度。
默认值为 1。
箭头的大小。目前这是一个常量,因此对于每条边都相同。如果提交了一个向量,那么只使用第一个元素,即,如果从边属性中获取它,那么只使用第一条边的属性来绘制所有箭头。这将来可能会改变。
默认值为 1。
箭头的宽度。目前这是一个常量,因此对于每条边都相同。如果提交了一个向量,那么只使用第一个元素,即,如果从边属性中获取它,那么只使用第一条边的属性来绘制所有箭头。这将来可能会改变。
此参数目前仅被 plot.igraph
使用。
默认值为 1,这给出了与此选项出现在 igraph 中之前的宽度相同的宽度。
边的线条类型。接受的格式几乎与标准图形 par
相同,0 和“blank”表示没有边,1 和“solid”表示实线,其他可能的值为:2 (“dashed”)、3 (“dotted”)、4 (“dotdash”)、5 (“longdash”)、6 (“twodash”)。
tkplot
还接受标准的 Tk 线条类型字符串,但它不支持“blank”线条,而是使用类型“1”代替类型“0”,即,将绘制实线。
对于 rglplot
,此参数将被忽略。
默认值为类型 1,即实线。
边标签。它们将被转换为字符。指定 NA
以省略边标签。
默认情况下,省略边标签。
边标签的字体系列。有关详细信息,请参阅具有相同名称的顶点参数。
边标签的字体。有关详细信息,请参阅前面讨论的相应顶点参数。
边标签的字体大小,有关详细信息,请参阅相应的顶点参数。
边标签的颜色,有关如何指定颜色,请参阅 color
顶点参数。
可以在此处显式地给出边标签的水平坐标。NA
元素将被自动计算的坐标替换。如果为 NULL
,则自动计算所有边的水平坐标。此参数仅受 plot.igraph
支持。
与 label.x
相同,但适用于垂直坐标。
指定是否绘制曲线边。它可以是逻辑向量或标量,也可以是数值向量或标量。
首先,复制该向量,使其长度与图中的边数相同。然后,单独解释每条边。数值指定边的曲率;零曲率表示直线边,负值表示边顺时针弯曲,正值表示边逆时针弯曲。TRUE
表示曲率 0.5,FALSE
表示曲率零。
默认情况下,指定曲率的向量通过调用 curve_multiple
函数来计算。此函数确保多个边是弯曲的并且都是可见的。循环边将忽略此参数。
默认值为 FALSE
。
目前 rglplot
忽略此参数。
此参数可用于指定应为哪些边绘制箭头。如果用户(以三种方式中的任何一种)给出了此参数,那么它将指定哪些边将具有前向、后向箭头,或者两者都有,或者根本没有箭头。与往常一样,此参数可以是向量或标量值。它可以是整数或字符类型。如果它是整数,那么 0 表示没有箭头,1 表示后向箭头,2 表示前向箭头,3 表示两者都有。如果它是字符向量,那么“<”和“<-”指定后向箭头,“>”和“->”指定前向箭头,“<>”和“<->”表示两个箭头都有。所有其他值表示没有箭头,也许您应该使用“-”或“–”来指定没有箭头。
提示:此参数可用作绘制“混合”图的“廉价”解决方案:图中有些边是有向的,有些边是无向的。如果想要这样做,那么请创建一个有向图,因为从 0.4 版本开始,可以在无向图中交换边列表中的顶点对。
默认情况下,对于无向图,不会绘制任何箭头,对于有向图,将根据其方向为每条边绘制一个箭头。这并不令人惊讶,这是预期的行为。
给出绘制循环边的弧度角。有关如何解释此参数,请参阅 label.dist
顶点参数。
默认值为 0。
给出绘制循环边的第二个弧度角。这仅在 3D 中使用,在 2D 中 loop.angle
就足够了。
默认值为 0。
其他参数
函数或数值矩阵。它指定顶点将如何放置在图上。
如果它是数值矩阵,那么该矩阵必须为每个顶点都有一行,指定其坐标。该矩阵应至少有两列,分别用于 x
和 y
坐标,并且还可以有第三列,这将是 3D 图的 z
坐标,并且对于 2D 图将被忽略。
如果为 3D 绘图函数 rglplot
给出了两列矩阵,那么第三列将被假定为每个顶点的 1。
如果 layout
是一个函数,那么将使用 graph
作为单个参数来调用此函数,以确定实际坐标。该函数应返回一个具有两列或三列的矩阵。对于 2D 图,第三列将被忽略。
默认值为 layout_nicely
,这是一个智能函数,可根据图选择一个布局器。
在图的下方、上方、左侧和右侧的空白空间量,它是长度为四的数值向量。通常 0 到 0.5 之间的值是有意义的,但也可能有负值,这将使图放大到图的一部分。如果它短于四,那么它将被循环使用。
rglplot
不支持此参数,因为它可以通过更灵活的方式放大和缩小图形。
其默认值为 0。
用于顶点颜色的调色板。默认值为 categorical_pal
,这是一个对色盲友好的分类调色板。有关详细信息和其他调色板,请参阅其手册页。此参数仅受 plot
支持,而不受 tkplot
和 rglplot
支持。
逻辑常量,是否将坐标重新缩放到 [-1,1]x[-1,1](x[-1,1]) 区间。未为 tkplot
实现此参数。
默认为 TRUE
,布局将被重新缩放。
数值常量,它给出了 plot
的 asp
参数,即纵横比。如果您不想给出纵横比,请在此处提供 0。tkplot
和 rglplot
将忽略它。
默认为 1。
布尔值,是否在图周围绘制框架。tkplot
和 rglplot
将忽略它。
默认为 FALSE
。
主图的总体标题。如果 annotate.plot
igraph 选项为 FALSE
,则默认值为空,否则为图的 name
属性。请参阅基本 plot
函数的相同参数。仅受 plot
支持。
主图的副标题,默认值为空。仅受 plot
支持。
x 轴的标题,如果 annotate.plot
igraph 选项为 FALSE
,则默认值为空,如果为 TRUE
,则为顶点和边的数量。仅受 plot
支持。
y 轴的标题,默认值为空。仅受 plot
支持。
Gabor Csardi csardi.gabor@gmail.com
plot.igraph
、tkplot
、rglplot
、igraph_options
## Not run:
# plotting a simple ring graph, all default parameters, except the layout
g <- make_ring(10)
g$layout <- layout_in_circle
plot(g)
tkplot(g)
rglplot(g)
# plotting a random graph, set the parameters in the command arguments
g <- barabasi.game(100)
plot(g, layout=layout_with_fr, vertex.size=4,
vertex.label.dist=0.5, vertex.color="red", edge.arrow.size=0.5)
# plot a random graph, different color for each component
g <- sample_gnp(100, 1/100)
comps <- components(g)$membership
colbar <- rainbow(max(comps)+1)
V(g)$color <- colbar[comps+1]
plot(g, layout=layout_with_fr, vertex.size=5, vertex.label=NA)
# plot communities in a graph
g <- make_full_graph(5) %du% make_full_graph(5) %du% make_full_graph(5)
g <- add_edges(g, c(1,6, 1,11, 6,11))
com <- cluster_spinglass(g, spins=5)
V(g)$color <- com$membership+1
g <- set_graph_attr(g, "layout", layout_with_kk(g))
plot(g, vertex.label.dist=1.5)
# draw a bunch of trees, fix layout
igraph_options(plot.layout=layout_as_tree)
plot(make_tree(20, 2))
plot(make_tree(50, 3), vertex.size=3, vertex.label=NA)
tkplot(make_tree(50, 2, mode="undirected"), vertex.size=10,
vertex.color="green")
## End(Not run)