# How to ListPlot two datasets on the same graph?

Consider the following dataset:

keys = {"a", "b", "c", "d"};
vals = Partition[Range[20], 5]
ds = Dataset[AssociationThread[keys, #] & /@ Transpose@vals]


In order to plot the first two columns (a being x and b being y) we do:

ListPlot[{ds[All, {"a", "b"}]}]


But if we want to add the last two columns as shown below, we get an error.

ListPlot[{ds[All, {"a", "b"}], ds[All, {"c", "d"}]}]


How can I plot the first two columns and the last two columns on the same ListPlot?

(The above plot was obtain using ListPlot[{list1, list2}])

The following seems to work:

ds[ListPlot @* Thread @* Values, {{"a", "b"}, {"c", "d"}}]


Another variation:

ds[ListPlot @* Values @* Transpose, {{"a", "b"}, {"c", "d"}}]

ds[ListPlot @* Transpose, {{#a, #b}, {#c, #d}}&]


Slightly shorter variant:

ds[ListPlot[#] &, {{#a, #b}, {#c, #d}} &]


A dirty get around this is to convert Mathematica datasets to lists and plot it:

ListPlot[{Normal@Values@ds[All, {"a", "b"}],
Normal@Values@ds[All, {"c", "d"}]}]