列表的图形表示

时间:2011-03-03 14:22:07

标签: wolfram-mathematica

假设我有三个列表:a={1,5,10,15} b={2,4,6,8}c={1,1,0,1,0}。我想要一个情节,ax轴,by轴,红色/黑色点为1/0。对于。例如坐标(5,4)将有一个红点 换句话说,坐标(a[i],b[i])将有一个红色/黑色点,具体取决于c[i]是1还是0。 我一直在尝试ListPlot,但无法弄清楚选项。

5 个答案:

答案 0 :(得分:8)

我建议这样做。

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
]

Mathematica graphics

或更短但更混淆

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

答案 1 :(得分:7)

列昂尼德的想法,也许更天真。

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

f[a, b, c] 

enter image description here

编辑:只是为了好玩

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]

enter image description here

答案 2 :(得分:6)

以下是你的观点:

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

(我删除了c中的最后一个元素,使其与ab的长度相同。我建议用零和一个单独制作点的图像,然后将它们组合起来 - 在这种情况下这似乎最简单:

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}}]]]]

以下是用法:

showPoints[a, b, c]

enter image description here

答案 3 :(得分:5)

一种可能性:

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

作为输出:

enter image description here

答案 4 :(得分:4)

你可以使用Graphics获得类似的结果(对于Leonid):

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

Using Graphics instead of ListPlot