Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have the following data:

  setA = {
  {875, 0.399483}, 
  {880, 0.391583}, 
  {885, 0.383609}};
  setB = {
  {645, 0.690354}, 
  {650, 0.685416}, 
  {655, 0.680413}};

I'm trying to plot the data from both sets on the same plot. I can do the following:

var[set_,col_] := set[[All, col]];

setAx = var[setA,1]; setAy = var[setA,2]; 
setBx = var[setB,1]; setBy = var[setB,2];

then plot:

valplot[var1_, var2_, opts_] := 
ListPlot[Transpose[{var1, var2}], PlotRange -> All, 
PlotStyle -> {Red}, Joined -> False, opts]

setsAandBPlots = GraphicsGrid[{
                  {setAyPlot = valplot[setAx, setAy, AxesLabel -> {"variable x", "variable y"}]}

                    (* ,etc... *)
                    }, ImageSize -> 300]

This is pretty clunky, I know (i'm very new to programming - and i'm starting with mathematica...).

I want to make a series of these plots comparing different sets (and the actual datasets i'm using are much larger than these - many more rows and columns)

I would like to be able plot multiple subsets (e.g. "(setAx and setbx) versus (setAy and SetBy)", etc...) on the same plots (defined by different colored markers) using something like "Show". There must be a neat(er) way to do it using, say, "Position" and "Intersection" to pick the individual values for plotting.

I guess I'm asking if any one can help me find a more general/programatic way to populate the lists "setAx, setAy,setBx, etc..." without having to write them out long-hand?



Sorry I oversimplified my data. It looks more like this:

setA = {{8.0, 830, 0.466626, 1.720689,0.200740, 0.018637, 0.009023, 0.029482, 0.091949, 0.074304, 0, 0}, 
        {8.0, 835, 0.459588, 1.742870, 0.202380, 0.019201, 0.010261, 0.032965, 0.093269, 0.074717, 0, 0}}; 
setB = {{8.0, 845, 0.445114, 1.787952, 0.205660, 0.020367, 0.013240, 0.041201, 0.095895, 0.075504, 0, 0}, 
        {8.0, 850, 0.437659, 1.810861, 0.207301, 0.020968, 0.015022, 0.046038, 0.097197, 0.075877, 0, 0}};

so, the data is essentially of the form {{A1x, A1y, A1z,…},{A2x,…}}; {{B1x, B1y, B1z,…},{B2x,…}};.

I'd like to be able to plot various combinations with axes: x vs. z, y vs. z etc. ListPlot alone won't help me do this... hence the use of new lists of the form Transpose[{Ax, Az}] etc..

share|improve this question
Are you sets of the form {x, y1, y2, ...} ? – b.gatessucks Nov 19 '12 at 11:22
How does the approach ListPlot[{setA, setB}] work for you ? – image_doctor Nov 19 '12 at 12:04
ListPlot supports plotting of multiple lists, as image_doctor points out, see, so plotting of your reference data works fine. – FredrikD Nov 19 '12 at 12:56
b.gatessucks, essentially yes. Sorry I over simplified my data. – geordie Nov 19 '12 at 20:03
I think I understand listplot. Please see below for an example of what my actual datasets look like. Nasser, Union seems to combine the lists so I lose the independence of the sets... – geordie Nov 19 '12 at 20:32
up vote 5 down vote accepted

for x vs y plot:




is a list of point coordinates with respect to what you specify by {firstAxe,secondAxe}.

X axe stands for 1, Y for 2 and Z for 3.

share|improve this answer
Thanks! this is not quite the way I was thinking of solving the problem but it works fairly nicely. however i needed to change your code to: ListPlot[{setA[[All,{1,2}]],setB[[All,{1,2}]]}] (i.e. add curly brackets) in order to compile. – geordie Nov 19 '12 at 23:54

The straightforward approach to answering the main part of your question, i.e. "..plot multiple subsets..using something like Show" is to use ListPlot on a list of data, see the manual on ListPlot

setA = {{875, 0.399483}, {880, 0.391583}, {885, 0.383609}};
setB = {{645, 0.690354}, {650, 0.685416}, {655, 0.680413}};

ListPlot[{setA, setB}]

which gives you a diagram like this: enter image description here

ListPlot automatically gives the data sets different colors and you can use other functions such as Tooltip, StatusArea and Annotation to add interactive labeling.

To automatically populate the lists from a source outside of Mathematica, I can recommend this post about getting data from Excel.

share|improve this answer
@FerdrikD, thanks for your answer, not quite what i'm after (see edit). Thanks for the link to the excel import question (it could come in handy). The data in this case do not come from excel. I tend to use textwrangler to format data for input. – geordie Nov 19 '12 at 21:53

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.