Dear Steen,
There is no simple way to handle your problem. One possibility is to use the
package 'network' which has a nicer algorithm to calculate the layout of nodes
than pegas has. The good thing is that 'network' returns the coordinates which
can then be input into plot.haploNet (see ?replot for something similar in
pegas). Here's a possible solution:
## net3 is from your script
library(network)
xy <- plot(as.network(net3))
xy <- list(x = xy[, 1], y = xy[, 2])
size <- round(sqrt(attr(net3, "freq")))
plot(net3, size = size, xy = xy, pie = ind.hap3, legend = TRUE, threshold = 0)
Note the layout returned by network is random, so you can repeat the 2nd line
above several times if you want, but it seems a single try is enough!
The second trick is to change the scale of the pie sizes using a square root
transformation. I'm afraid that when the sizes of symbols are too contrasted,
plot.haploNet() is really at a pain! I'll try to have a look at it if this can
be improved.
In the last command, you'll still need to click on the plot to show where to
draw the legend, but R will print the coordinates so these may be included in
the script (or more simply you can delete the 'legend = TRUE' of you don't want
the legend).
Note that you did a TCS network (has done by pegas::haploNet) which has a lot of
alternative links (hence the 'threshold = 0' option). You may try an RMST
network which has much less alternatives links:
d3 <- dist.dna(h3, "N", p = TRUE)
rmst3 <- rmst(d3)
Plotting can be done with:
xybis <- plot(as.network(rmst3))
xybis <- list(x = xybis[, 1], y = xybis[, 2])
plot(rmst3, size = sz, xy = xybis, pie = ind.hap3, legend = TRUE, threshold = 0)
Note that, if this is useful for you, you can use 'xy = xy' in the last command
so that the layout of haplotypes will be identical with the two networks.
You may also look in more details this help page in network:
?network.layout.fruchtermanreingold
It explains how the change the parameters of the layout calculations.
HTH
Best,
Emmanuel
----- Le 2 Juin 22, ? 9:07, Steen Wilhelm Knudsen swknudsen at snm.ku.dk a ?crit :
Dear All subscribers of the R-sig-genetics Archives,
I have a question to plotting haplotype networks using the packages 'pegas' and
'ape' in R.
I often end up with overlapping pies for haplotypes, and appear unable to work
around it by adjusting the 'scale.ratio' when making the plot.
I could abstain from using the frequency of the haplotypes as determining the
size of the pies. But I would prefer to keep this setting, so that the diagram
ends up having circles that reflects the sample size. Instead I would like to
know if I can adjust the length of the lines between the pies, and perhaps
determine where the pies are to be positioned in the plot.
My understanding of the lines between the pies is that these lines are adjusted
in length to reflect the number of differences between the haplotypes. This is
fine, but seems to prevent me from avoiding the pies being overlaid. I am happy
to have incorrect lengths for the connecting lines, and can instead just use
the option that adds a number on such a connecting line, a number that informs
how many differences there are between the haplotypes being connected by the
line.
I have had a go with the 'replot' function, but for some reason I can only
select the same pie over and over again. Also, I would prefer to do the entire
plotting by code alone. One of my motivations from switching away from
'Network', 'popart' and 'TCS' was to avoid all the clicking and moving around
with pies.
I have placed my input file here
https://github.com/monis4567/Mnemiopsis_leidyi_in_NE_Atlantic/blob/main/suppmat01_inp_files/algn_Mnelei_18s_10.aligned.fasta.fas
My R code for making a haplotype network with this input file can be found here
https://github.com/monis4567/Mnemiopsis_leidyi_in_NE_Atlantic/blob/main/suppmat03_Rcodes/Rcode_example02_make_haplonet_v01.R
Can anyone suggest me how I can adjust this code to get haplotype networks where
pies do not overlap, or how I can adjust the length of the connecting lines, to
avoid the pies overlapping. Or suggest me a different solution that can sort
out my problem, but preferably let me solve the issue of presenting a diagram
that is possible to read while performing all the coding in R, and not having
to adjust the plot manually afterwards?
Thanks in advance for your time and help,
Steen Knudsen
Natural History Museum of Denmark
[[alternative HTML version deleted]]