开发者

Graphical Representation of Lists

Say I have three lists: a={1,5,10,15} b={2,4,6,8} and c={1,1,0,1,0}. I want a plot which has a as the x开发者_开发百科 axis, b as the y axis and a red/black dot to mark 1/0. For. e.g. The coordinate (5,4) will have a red dot.

In other words the coordinate (a[i],b[i]) will have a red/black dot depending on whether c[i] is 1 or 0.

I have been trying my hand with ListPlot but can't figure out the options.


I suggest this.

a = {1, 5, 10, 15};
b = {2, 4, 6, 8};
c = {1, 1, 0, 1};

Graphics[
  {#, Point@{##2}} & @@@ 
    Thread@{c /. {1 -> Red, 0 -> Black}, a, b},
  Axes -> True, AxesOrigin -> 0
]

Graphical Representation of Lists

Or shorter but more obfuscated

Graphics[
  {Hue[1, 1, #], Point@{##2}} & @@@ Thread@{c, a, b}, 
  Axes -> True, AxesOrigin -> 0
]


Leonid's idea, perhaps more naive.

f[a_, b_, c_] := 
 ListPlot[Pick[Transpose[{a, b}], c, #] & /@ {0, 1}, 
       PlotStyle -> {PointSize[Large], {Blue, Red}}]

f[a, b, c] 

Graphical Representation of Lists

Edit: Just for fun

f[h_, a_, b_, c_, opt___] := 
 h[Pick[Transpose[{a, b}], c, #] & /@ {0, 1}, 
  PlotStyle -> {PointSize[Large], {Blue, Red}}, opt]  

f[ ListPlot, 
   Sort@RandomReal[1, 100], 
   Sin[(2 \[Pi] #)/100] + RandomReal[#/100] & /@ Range[100], 
   RandomInteger[1, 100], 
      Joined -> True, 
      InterpolationOrder -> 2, 
      Filling -> Axis]

Graphical Representation of Lists


Here are your points:

a = {1, 5, 10, 15};
b = {2, 4, 6, 8};
c = {1, 1, 0, 1};

(I deleted the last element from c to make it the same length as a and b). What I'd suggest is to separately make images for points with zeros and ones and then combine them - this seems easiest in this situation:

showPoints[a_, b_, c_] :=
With[{coords = Transpose[{a, b}]},
   With[{plotF = ListPlot[Pick[coords, c, #], PlotMarkers -> Automatic, PlotStyle -> #2] &},
     Show[MapThread[plotF, {{0, 1}, {Black, Red}}]]]]

Here is the usage:

showPoints[a, b, c]

Graphical Representation of Lists


One possibility:

ListPlot[List /@ Transpose[{a, b}], 
 PlotMarkers -> {1, 1, 0, 1} /. {1 -> { Style[\[FilledCircle], Red], 10}, 
   0 -> { { Style[\[FilledCircle], Black], 10}}}, 
 AxesOrigin -> {0, 0}]

Giving as output:

Graphical Representation of Lists


You could obtain similar results (to those of Leonid) using Graphics:

    Graphics[{PointSize[.02], Transpose[{(c/. {1 -> Red, 0 -> Black}), 
              Point /@ Transpose[{a, b}]}]},
              Axes -> True, AxesOrigin -> {0, 0}]

Graphical Representation of Lists

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜