假设我有三个列表:a={1,5,10,15} b={2,4,6,8}
和c={1,1,0,1,0}
。我想要一个情节,a
为x
轴,b
为y
轴,红色/黑色点为1/0。对于。例如坐标(5,4)
将有一个红点
换句话说,坐标(a[i],b[i])
将有一个红色/黑色点,具体取决于c[i]
是1还是0。
我一直在尝试ListPlot
,但无法弄清楚选项。
答案 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
]
或更短但更混淆
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]
编辑:只是为了好玩
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]
答案 2 :(得分:6)
以下是你的观点:
a = {1, 5, 10, 15};
b = {2, 4, 6, 8};
c = {1, 1, 0, 1};
(我删除了c
中的最后一个元素,使其与a
和b
的长度相同。我建议用零和一个单独制作点的图像,然后将它们组合起来 - 在这种情况下这似乎最简单:
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]
答案 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}]
作为输出:
答案 4 :(得分:4)
你可以使用Graphics获得类似的结果(对于Leonid):
Graphics[{PointSize[.02], Transpose[{(c/. {1 -> Red, 0 -> Black}),
Point /@ Transpose[{a, b}]}]},
Axes -> True, AxesOrigin -> {0, 0}]