Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Making a correlation arrow #252

Open
andpir55 opened this issue Oct 26, 2017 · 6 comments
Open

Making a correlation arrow #252

andpir55 opened this issue Oct 26, 2017 · 6 comments

Comments

@andpir55
Copy link

Hello,

I use diagrameR to make path diagrams, for which it is proving to be really helpful. However I have an issue I cannot figure out by myself.

I need to make a curve bidirectional arrow between two nodes in order to represent correlation, following the standard notation. But after searching for a long time, I don't see how I can do it.

Any advice?

Thank you.

@rich-iannone
Copy link
Owner

@andpir55 try using this example to make a bidirectional arrow:

graph <-
  create_graph() %>%
  add_path(
    n = 2,
    edge_aes = edge_aes(
      dir = "both",
      arrowhead = "normal",
      arrowtail = "normal",
      color = "steelblue")) 

graph %>% render_graph()

Unfortunately, there is no way to dependably force curved arrows.

@okeep
Copy link

okeep commented Apr 10, 2018

I have a related question that probably has the same answer (but may help with the above question). Is there a way to dependably force straight arrows? I ask because I've had a similar issue, only I seem to be able to get either the curved arrows I want or the straight arrows, but not both.

This produces a straight edge graph (but the correlation edges overlap variable nodes)

grViz("
      digraph {
      graph [layout=neato, overlap=false, outputfirst= nodes]
      ScoreK1[shape=box, pos='-2,0!']
ScoreK2[shape=box, pos='2,0!']
e1[shape=circle, pos='-3,1!']
e2[shape=circle, pos='3,1!']
a1[shape=circle, pos='-2,1!']
a2[shape=circle, pos='2,1!']
c1[shape=circle, pos='-1,1!']
c2[shape=circle, pos='1,1!']
e1->ScoreK1
e2->ScoreK2
a1->ScoreK1
a2->ScoreK2
a1->a2 [dir=both, label='1/0.5']
c1->ScoreK1
c2->ScoreK2
c1->c2 [dir=both, label='1']
      }")

while this produces curved arrows (but for all edges, which is unorthodox for non-double headed arrows in these sorts of graphs).

grViz("
      digraph {
      graph [layout=neato, overlap=false, outputfirst= nodes, splines=curved]
      ScoreK1[shape=box, pos='-2,0!']
ScoreK2[shape=box, pos='2,0!']
e1[shape=circle, pos='-3,1!']
e2[shape=circle, pos='3,1!']
a1[shape=circle, pos='-2,1!']
a2[shape=circle, pos='2,1!']
c1[shape=circle, pos='-1,1!']
c2[shape=circle, pos='1,1!']
e1->ScoreK1
e2->ScoreK2
a1->ScoreK1
a2->ScoreK2
a1->a2 [dir=both, label='1/0.5']
c1->ScoreK1
c2->ScoreK2
c1->c2 [dir=both, label='1']
      }")

I'm just wondering if, given that forcing curvature doesn't seem to be doable, there is a way to force straightness for individual arrows?

@dr-JT
Copy link

dr-JT commented Mar 21, 2019

It would be really great if forcing/customizing curved edges can be added as a feature. Otherwise not sure how useful this package is for what I was hoping to do :/

@jebyrnes
Copy link

Indeed - it would help A LOT for plotting SEMs when representing correlations.

@jebyrnes
Copy link

Hey, thought I'd poke in and see if this was still a priority? Working on a MS and was hoping to include some curved arrows. I was able to do them using the graphviz specification - see http://rpubs.com/jebyrnes/causal_mods, but, was hoping they could work with the general solution. Thanks again for an amazing package!

@rich-iannone
Copy link
Owner

As far as I could tell, when using Graphviz through grViz(), the only way to get curved arrows would be to post-process the output SVG (replacing the straight arrows with curved ones).

I'm toying with the idea of developing a new renderer based on SVG. Of course, that would be a big project but it would be the way to go. With that, we could also have rotated text (!) and other nice things. I'm experimenting with all of this in the omsvg package (https://github.com/rich-iannone/omsvg). If anybody here has some interest in SVG graphics and some ideas in how to migrate over to a new output renderer, please file some issues there!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants