Dear Gabor, I've kept using your great option "vertex.frame.width" until today (see message I'm replying to). But with R 2.15.3 & igraph 0.6.5-1 I've just updated, it doesn't work anymore :-(
For example, I cannot reproduce the example at the end of your post. I get the following error (in french) Erreur dans .igraph.shapes[[shape[1]]]$clip : objet de type 'closure' non indiçable Thanks in advance for your help ! Best, Yannick 2009/9/10 Gábor Csárdi <[email protected]> > Yannick, > > the logo was not actually made with igraph. :( But anyway, you can > change the edge width by giving 'edge.width' to plot, or setting the > 'width' edge attribute. You cannot currently change the width of the > frame, at least not easily, you need to define a new vertex shape for > this, slightly modifying the current 'circle' shape. > > .igraph.shape.circle2 <- function(coords, el=NULL, v=NULL, > mode=c("clip", "plot"), > params, end=c("both", "from", "to")) { > > mode=match.arg(mode) > end =match.arg(end) > > ##################################################################### > ## clipping mode > > if (mode=="clip") { > if (length(coords)==0) { return (coords) } > > vertex.size <- 1/200 * params("vertex", "size") > > if (end=="from") { > phi <- atan2(coords[,4] - coords[,2], coords[,3] - coords[,1]) > vsize.from <- if (length(vertex.size)==1) { > vertex.size > } else { > vertex.size[ el[,1]+1 ] > } > res <- cbind(coords[,1] + vsize.from*cos(phi), > coords[,2] + vsize.from*sin(phi) ) > } else if (end=="to") { > phi <- atan2(coords[,4] - coords[,2], coords[,3] - coords[,1]) > r <- sqrt( (coords[,3] - coords[,1])^2 + (coords[,4] - coords[,2])^2 > ) > vsize.to <- if (length(vertex.size)==1) { > vertex.size > } else { > vertex.size[ el[,2]+1 ] > } > res <- cbind(coords[,1] + (r-vsize.to)*cos(phi), > coords[,2] + (r-vsize.to)*sin(phi) ) > } else if (end=="both") { > phi <- atan2(coords[,4] - coords[,2], coords[,3] - coords[,1]) > r <- sqrt( (coords[,3] - coords[,1])^2 + (coords[,4] - coords[,2])^2 > ) > vsize.from <- if (length(vertex.size)==1) { > vertex.size > } else { > vertex.size[ el[,1]+1 ] > } > vsize.to <- if (length(vertex.size)==1) { > vertex.size > } else { > vertex.size[ el[,2]+1 ] > } > res <- cbind(coords[,1] + vsize.from*cos(phi), > coords[,2] + vsize.from*sin(phi), > coords[,1] + (r-vsize.to)*cos(phi), > coords[,2] + (r-vsize.to)*sin(phi) ) > } > > res > > ##################################################################### > ## plotting mode > > } else if (mode=="plot") { > vertex.color <- params("vertex", "color") > if (length(vertex.color) != 1 && !is.null(v)) { > vertex.color <- vertex.color[v+1] > } > vertex.frame.color <- params("vertex", "frame.color") > if (length(vertex.frame.color) != 1 && !is.null(v)) { > vertex.frame.color <- vertex.frame.color[v+1] > } > vertex.size <- 1/200 * params("vertex", "size") > if (length(vertex.size) != 1 && !is.null(v)) { > vertex.size <- vertex.size[v+1] > } > vertex.size <- rep(vertex.size, length=nrow(coords)) > > vertex.frame.width <- params("vertex", "frame.width") > vertex.frame.width <- rep(vertex.frame.width, length=nrow(coords)) > > vertex.color <- rep(vertex.color, length=nrow(coords)) > vertex.frame.color <- rep(vertex.frame.color, length=nrow(coords)) > vertex.size <- rep(vertex.size, length=nrow(coords)) > > for (i in seq_len(nrow(coords))) { > symbols(x=coords[i,1], y=coords[i,2], bg=vertex.color[i], > fg=vertex.frame.color[i], > circles=vertex.size[i], add=TRUE, inches=FALSE, > lwd=vertex.frame.width[i]) > } > } > > } > > .igraph.shapes <- get( ".igraph.shapes", asNamespace("igraph")) > .igraph.shapes[["circle2"]] <- .igraph.shape.circle2 > unlockBinding(".igraph.shapes", asNamespace("igraph")) > assign(".igraph.shapes", .igraph.shapes, envir=asNamespace("igraph")) > > i.default.values <- get("i.default.values", asNamespace("igraph")) > i.default.values$vertex$frame.width=1 > unlockBinding("i.default.values", asNamespace("igraph")) > assign("i.default.values", i.default.values, envir=asNamespace("igraph")) > > and then you can do something like this: > > plot(graph.ring(10), layout=layout.circle, vertex.shape="circle2", > vertex.frame.width=5, edge.width=1:10) > > We should have an API for adding new vertex shapes soon..... > > Best, > Gabor > > On Thu, Sep 10, 2009 at 2:09 PM, Yannick Rochat > <[email protected]> wrote: > > Dear Gábor and Tamás, > > > > I'm plotting some graphs for a poster and I would like to increase the > width > > of the edges and the vertices' frames in order to have it equal > everywhere. > > How can I do that? It seems possible to do it with igraph: > > http://igraph.sourceforge.net/images/igraph2.png if that was produced > with > > igraph :) > > > > Thanks! > > > > > > Yannick Rochat - IMA - Université de Lausanne > > http://www.unil.ch/unisciences/YannickRochat > > > > _______________________________________________ > > igraph-help mailing list > > [email protected] > > http://lists.nongnu.org/mailman/listinfo/igraph-help > > > > > > > > -- > Gabor Csardi <[email protected]> UNIL DGM > > > _______________________________________________ > igraph-help mailing list > [email protected] > http://lists.nongnu.org/mailman/listinfo/igraph-help >
_______________________________________________ igraph-help mailing list [email protected] https://lists.nongnu.org/mailman/listinfo/igraph-help
