Is there a way to arrange the labels in an even way along the edges? Plus, how can I curve the covariance arrow?

I’m actually quite happy with the graphics so far, but the labels along the graphics and the non-curved double arrow don’t satisfy me yet.

  1. Is there a way to distribute the labels evenly along the labels. e.g. that the labels along TEST 1 are all exactly vertically above each other? Or can I move the labels at TEST 2 horizontally apart? The same applies to the values that are close to the arrows themselves (such as 0.49**, -0.35 or 0.22*). Exact coordinates cannot be given for the labels, can they?

  2. How do I get the covariance arrow bent?

grViz("
digraph SEM {

graph [layout = neato,
       overlap = true,
       outputorder = edgesfirst]

node [shape = rectangle]

a [pos = '-5,1!', label = 'parcel 1']
b [pos = '-5,0!', label = 'parcel 2']
c [pos = '-5,-1!', label = 'parcel 3']
d [pos = '-5,-2!', label = 'parcel 4']

e [pos = ' 2,-5!', label = 'parcel 5']
f [pos = ' 3,-5!', label = 'parcel 6']
g [pos = ' 4,-5!', label = 'parcel 7']
h [pos = ' 5,-5!', label = 'parcel 8']

i [pos = ' -4.25,-5!', label = 'Item 1']
j [pos = ' -3,-5!', label = 'Item 2']
k [pos = ' -2,-5!', label = 'Item 3']
l [pos = ' -1,-5!', label = 'Item 4']
m [pos = ' 0,-5!', label = 'Item 5']

n [pos = '-3,-0.5!', label = 'TEST1', shape = ellipse]
o [pos = '3.5,-3!', label = 'TEST', shape = ellipse]
p [pos = '-2,-3!', label = 'TEST2', shape = ellipse]
q [pos = '5,-0.5!', label = 'TEST']
r [pos = '-1,2!', label = 'TEST']
s [pos = '2,2!', label = 'TEST'] 

n->a [label='0.71', headport = 'e']
n->b [label='0.72', headport = 'e']
n->c [label='0.65', headport = 'e']
n->d [label='0.64', headport = 'e']

o->e [label = '0.79', headport = 'n']
o->f [label = '0.79', headport = 'n']
o->g [label = '0.79', headport = 'n']
o->h [label = '0.78', headport = 'n']

p->i [label = '0.35',  headport = 'n']
p->j [label = '0.48',  headport = 'n']
p->k [label = '0.81',  headport = 'n']
p->l [label = '0.64',  headport = 'n']
p->m [label = '0.72',  headport = 'n']

o->q [label = '0.55**' fontname = 'times-bold']
p->q [label = '0.05']
n->q [label = '-0.04']
r->q [label = '0.00']
s->q [label = '0.15']

r->o [label = '-0.01']
n->o [label = '0.49**'  fontname = 'times-bold']
s->o [label = '0.22*'  fontname = 'times-bold']

n->p [label = '-0.35*'  fontname = 'times-bold']
r->p [label = '-0.03']
s->p [label = '0.15']

r->n [label = '0.33**'  fontname = 'times-bold']
s->n [label = '0.19']

r->s [label = '0.00']

i->j [dir = both]
p->o [dir = both, label = '-0.20' ]

}
")

Do you have any questions about the answer on stackoverflow?

For posterity, I guess the stackoverflow reference refers to graphviz - Diagrams R/GrViz: Is there a way to arrange the labels in an even way along the arrows/edges? Plus, how can I curve the covariance arrow/edge? - Stack Overflow.