Peut-être quelque chose comme ceci:
coords = {2 -> {1/3, 1}, 1 -> {0, 0}, 3 -> {(1/3 + 2)/2, 1},
4 -> {2, 1}, 5 -> {2 + 1/3, 2}};
pr = {{-1, 3 + 1/3}, {-1 - 1/6, 3 + 1/6}};
scale = 50;
is = -scale*(Subtract @@@ pr);
lineThickness = 2/3;
graph = {1 -> 2, 2 -> 3, 3 -> 4, 4 -> 5};
gp = GraphPlot[graph, VertexCoordinateRules -> coords];
path = {1, 2, 3, 4, 5};
f = BezierFunction[
SortBy[coords /. Rule[x_, List[a_, b_]] -> List[a, b], First]];
pp = ParametricPlot[f[t], {t, 0, 1}];
lp = Graphics[{Blue, Opacity[.5],
AbsoluteThickness[lineThickness*scale], Line[path /. coords]}];
Show[pp, lp, gp, PlotRange -> pr, ImageSize -> is]
![alt text](https://i.stack.imgur.com/6B3VE.png)
Vous pouvez gagner un meilleur contrôle sur le chemin par l'ajout/suppression des points de contrôle pour la Bézier. Comme je me souviens "Une Bspline est contenue dans la coque convexe de ses points de contrôle", ainsi vous pouvez ajouter des points de contrôle à l'intérieur de vos lignes épaisses (en haut et en bas des points intermédiaires, par exemple) pour relier le Bézier de plus en plus.
Modifier
Ce qui suit est une première tentative pour délimiter la courbe. Une mauvaise programmation, juste pour obtenir le sentiment de ce qui peut être fait:
coords = {2 -> {1/3, 1}, 1 -> {0, 0}, 3 -> {(1/3 + 2)/2, 1},
4 -> {2, 1}, 5 -> {2 + 1/3, 2}};
pr = {{-1, 3 + 1/3}, {-1 - 1/6, 3 + 1/6}};
scale = 50;
is = -scale*(Subtract @@@ pr);
lineThickness = 2/3;
graph = {1 -> 2, 2 -> 3, 3 -> 4, 4 -> 5};
gp = GraphPlot[graph, VertexCoordinateRules -> coords];
path = {1, 2, 3, 4, 5};
kk = SortBy[coords /. Rule[x_, List[y_, z_]] -> List[y, z],
First]; f = BezierFunction[kk];
pp = ParametricPlot[f[t], {t, 0, 1}, Axes -> False];
mp = Table[{a = (kk[[i + 1, 1]] - kk[[i, 1]])/2 + kk[[i, 1]],
Interpolation[{kk[[i]], kk[[i + 1]]}, InterpolationOrder -> 1][
a] + lineThickness/2}, {i, 1, Length[kk] - 1}];
mp2 = mp /. {x_, y_} -> {x, y - lineThickness};
kk1 = SortBy[Union[kk, mp, mp2], First]
g = BezierFunction[kk1];
pp2 = ParametricPlot[g[t], {t, 0, 1}, Axes -> False];
lp = Graphics[{Blue, Opacity[.5],
AbsoluteThickness[lineThickness*scale], Line[path /. coords]}];
Show[pp, pp2, lp, gp, PlotRange -> pr, ImageSize -> is]
![alt text](https://i.stack.imgur.com/e2nGH.png)
Edit 2
Ou peut-être mieux encore:
g1 = Graphics[BSplineCurve[kk1]];
Show[lp, g1, PlotRange -> pr, ImageSize -> is]
![alt text](https://i.stack.imgur.com/aeJOE.png)
Ceci sur e échelles très bien lorsque vous agrandissez l'image (les précédents ne le font pas)
Accepteriez-vous une solution qui a attiré un tube linéaire par morceaux autour d'une courbe lisse? –
L'objectif est automatiquement construit des diagrammes comme le premier ici (c'est à dire, les lignes courbes colorées à l'intérieur du graphique) - http://en.wikipedia.org/wiki/Tree_decomposition –