1806


各vertexの形(shape)を楕円として描画したいです。

独自のshapeを作るサンプルとして[ドキュメント](http://igraph.org/r/doc/igraph.vertex.shapes.html)があるのですが
三角形や星形を作るのにsymbols()を利用しています。 symbols()では真円は作れるのですが楕円は作れなそうです。

どなたか良い方法をご存知でしょうか。

* * *

追記: パッケージを追加導入して楕円の描画ができることを確認しましたので、パッケージを使わなくて済む方法についてお教えいただけると助かります。


CC BY-SA 3.0
2014-12-16T08:45:22.183
1719
2014-12-16T17:05:41.220
2014-12-16T09:32:04.483
3313
3313
question
r
Rのigraphでvertexの形を楕円にしたい（できれば追加パッケージなしで）


自己レスです。`plotrix`というパッケージを利用することで、一応楕円の描画までは成功しました。

[code]

    library(igraph)
    library(plotrix)
    myellipse <- function(coords, v=NULL, params) {
        vertex.color <- params("vertex", "color")
        if (length(vertex.color) != 1 && !is.null(v)) {
            vertex.color <- vertex.color[v]    
        }
        vertex.size <- 1/200 * params("vertex", "size")
        if (length(vertex.size) != 1 && !is.null(v)) {
            vertex.size <- vertex.size[v]
        }
        vertex.size2 <- 1/200 * params("vertex", "size2")
        if (length(vertex.size2) != 1 && !is.null(v)) {
            vertex.size2 <- vertex.size2[v]
        }
        draw.ellipse(coords[,1], coords[2,], vertex.size, vertex.size2,
            col = vertex.color)
    }
    add.vertex.shape("ellipse", clip=igraph.shape.noclip, plot=myellipse)
    
[/code]

引き続き、パッケージの追加導入を必要としない方法があれば募集します。


CC BY-SA 3.0
2014-12-16T09:28:30.423
1726
2014-12-16T09:28:30.423
3313
1719
answer


こんな感じで自作の楕円を描く関数を定義してやれば楕円は描けるみたいです。  
（すみません、これは適当につくったので楕円が欠けちゃってるんですけど）

けどまあ、自己レスされているように`plotrix`パッケージとか、`ellipse`パッケージの関数を使うのがお手軽ではないかと思います。  
あまりお役に立てずすみません。。

[code]

    library(igraph)
    
    shapes <- setdiff(vertex.shapes(), "")
    g <- graph.ring(length(shapes))
    
    myellipse <- function(coords, v=NULL, params) {
      vertex.color <- params("vertex", "color")
      if (length(vertex.color) != 1 && !is.null(v)) {
        vertex.color <- vertex.color[v]
      }
      vertex.size <- 1/200 * params("vertex", "size")
      if (length(vertex.size) != 1 && !is.null(v)) {
        vertex.size <- vertex.size[v]
      }
      vertex.size2 <- 1/200 * params("vertex", "size2")
      if (length(vertex.size2) != 1 && !is.null(v)) {
        vertex.size2 <- vertex.size2[v]
      }
    
      ellipse <- function(cx, cy, a, b){
        plot(function(x) b*sqrt(1-(x-cx)^2/a^2) + cy, cx - a, cx + a, add = TRUE)
        plot(function(x) -b*sqrt(1-(x-cx)^2/a^2) + cy, cx - a, cx + a, add = TRUE)
      }
    
      n <- nrow(coords)
      lapply(1:n, function(i) ellipse(coords[i,1], coords[i,2], vertex.size, vertex.size2))
    }
    add.vertex.shape("ellipse", clip=igraph.shape.noclip, plot=myellipse)
    plot(g, vertex.shape="ellipse", vertex.size=30, vertex.size2=20)
    
[/code]

![楕円](https://i.stack.imgur.com/EBNB6.png)


CC BY-SA 3.0
2014-12-16T17:05:41.220
1806
2014-12-16T17:05:41.220
2544
1719
answer