1. Limited time only! Sign up for a free 30min personal tutor trial with Chegg Tutors
    Dismiss Notice
Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Homework Help: Plotting data in Mathematica certain colours depending on

  1. Jun 20, 2013 #1
    1. The problem statement, all variables and given/known data

    I have a list of data in .csv format that looks like the following:

    10 5 TRUE
    10.1 5.1 TRUE
    10.2 5.2 FALSE
    10.3 5.3 FALSE
    10.4 5.4 FALSE
    10.5 5.5 TRUE
    10.6 5.6 TRUE
    There are thousands of entries.

    I want to make a scatter plot in Mathematica where it plots the points {10, 5}, {10.1, 5.1}, etc., but I want the ones with TRUE to be blue, and FALSE to be red.

    2. Relevant equations


    3. The attempt at a solution

    I've tried using a while loop then an if statement to do this, but it seems to be an infinite loop. What I did was:

    homeruns = column3 (so this is now a list with TRUE FALSE TRUE FALSE etc.)
    angles = column2
    initialV = column1

    Code (Text):
    ListPlot[Transpose[{angles, initialV}], i=0; while [i<length[homeruns], If [ truefalse[[i]], PlotStyle -> {Blue}, PlotStyle -> {Red} ] i++; ]]
    But this is just stupid. How could I go about making a plot where certain sections of the plot will be one colorr vs another colour, depending on that point's truth value?
    1. The problem statement, all variables and given/known data

    2. Relevant equations

    3. The attempt at a solution
  2. jcsd
  3. Jun 20, 2013 #2
    In[1]:= data = Import["data.csv"]

    Out[1]= {{10, 5, "TRUE"}, {10.1, 5.1, "TRUE"}, {10.2, 5.5, "FALSE"}, {10.3, 5.6, "FALSE"}, {10.4, 5.7, "FALSE"}, {10.5, 5.5, "TRUE"}, {10.6, 5.6, "TRUE"}}

    In[2]:= truedata = Cases[data, {x_, y_, "TRUE"} :> {x, y}]

    Out[2]= {{10, 5}, {10.1, 5.1}, {10.5, 5.5}, {10.6, 5.6}}

    In[3]:= falsedata = Cases[data, {x_, y_, "FALSE"} :> {x, y}]

    Out[3]= {{10.2, 5.5}, {10.3, 5.6}, {10.4, 5.7}}

    In[4]:= ListPlot[{truedata, falsedata}, Joined -> True]

    Out[4]= ...PlotSnipped...

    And then you can begin exploring graphics primitives to change colors of individual plots, points, etc

    But watch out for combining several plots when some versions Mathematica will take the PlotRange from the first data set and ignore the range of subsequent data sets. You can overcome that by giving an explicit PlotRange large enough to show all your data
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook

Have something to add?
Draft saved Draft deleted