# How to manipulate the colours when joining points in ListPlot

Suppose I plot out two sets of data on the same graph as follows:

ListPlot[{{{1, 1}, {2, 2}, {4, 4}}, {{3, 3}, {5, 5}, {6, 6}}}]


The colours of the points change based on which data set it belongs in. However, when I join the points up:

ListPlot[{{{1, 1}, {2, 2}, {4, 4}}, {{3, 3}, {5, 5}, {6, 6}}},Joined -> True]


it treats the two data sets separately and over-rides the curves. Is there a way to manipulate the colours when joining the points together such that it is treated as a single data set, but changes colour based on the set that the nearest point belongs to? I guess this may involve combining the sets in order while keeping track of which data set each point belongs to, but I'm not sure how to do this.

Thanks in advance for any help.

This solution splits the two data sets into multiple sets.

Each segment is coloured according to the end-point nearest the origin.

{set1, set2} = {{{1, 1}, {2, 2}, {4, 4}}, {{3, 3}, {5, 5}, {6, 6}}};

allpts = Sort@Apply[Sequence, {set1, set2}, {1}];

currentList = accumulatedLists = {};
cols = {ColorData[97, 1]};

If[MemberQ[set1, #],
If[OddQ[Length[accumulatedLists]],
AppendTo[currentList, #];
AppendTo[accumulatedLists, currentList];
AppendTo[cols, ColorData[97, 1]];
currentList = {}];
AppendTo[currentList, #],
If[EvenQ[Length[accumulatedLists]],
AppendTo[currentList, #];
AppendTo[accumulatedLists, currentList];
AppendTo[cols, ColorData[97, 2]];
currentList = {}];
AppendTo[currentList, #]] & /@ allpts;
AppendTo[accumulatedLists, currentList];

ListLinePlot[accumulatedLists, PlotStyle -> cols]


lists = {{{1, 1}, {2, 2}, {4, 4}}, {{3, 3}, {5, 5}, {6, 6}}};
{region1, region2} = Point /@ lists;
{bsf1, bsf2} = BSplineFunction /@ lists;

ParametricPlot[{bsf1[t], bsf2[t]}, {t, 0, 1},
ColorFunction ->
(If[RegionDistance[region1][{#, #2}] < RegionDistance[region2][{#, #2}],
ColorData[97][1], ColorData[97][2]] &),
ColorFunctionScaling -> False,
PlotStyle -> Directive[CapForm["Butt"], AbsoluteThickness[4]],
Epilog -> First[ListPlot[lists, PlotStyle -> AbsolutePointSize[8]]]]


data = {{{1, 1}, {2, 2}, {4, 4}}, {{3, 3}, {5, 5}, {6, 6}}};


The data intervals overlap so that when each are Joined the second line is on top of the first and hides a portion of the first.

Using Dashed for the second line enables the first to show through.

ListPlot[data,
PlotStyle -> {Automatic, Dashed},
Joined -> True]


Alternatively, using PlotMarkers highlights the overlap.

ListPlot[data,
PlotMarkers -> Automatic,
Joined -> True]


Or you can Blend the colors

ListPlot[Join @@ data,
Joined -> True,
ColorFunction -> (Blend[ColorData[97] /@ {1, 2}, #1] &)]


Blend colors with distinct PlotMarkers

Show[
ListPlot[Join @@ data,
Joined -> True,
ColorFunction -> (Blend[ColorData[97] /@ {1, 2}, #1] &)],
ListPlot[data,
PlotMarkers -> Automatic]]


Or anything else you can think up.