ListPlot:单个点颜色

时间:2014-04-06 11:14:30

标签: wolfram-mathematica

我有一个像

这样的简单ListPlot
list2 = Table[{x, Sqrt[x]}, {x, 0, 100}];

现在我想用RED为特定点着色,比如每5点,我试过

mycolor[x_] /; Mod[x, 5] == 0 = Red;
mycolor[_] = Blue;

现在

ListPlot[#, PlotStyle -> AbsolutePointSize[3], ColorFunction -> 
mycolor[#[[All, 1]], ColorFunctionScaling -> False]] &[list2]

不能正常工作,所有点仍然是蓝色的。 这有什么不对?

谢谢, ARCHI

1 个答案:

答案 0 :(得分:3)

以下是获取结果的简便方法: -

list2 = Table[{x, Sqrt[x]}, {x, 0, 100}];
mycolor[x_] := If[Mod[x, 5] == 0, Red, Blue];
mycolors = mycolor /@ list2[[All, 1]];
ListPlot[List /@ list2,
 PlotStyle -> Map[{AbsolutePointSize[3], #} &, mycolors]]

enter image description here

或者,使用颜色功能,感谢george链接上的rm -rf's answer: -

list2 = Table[{x, Sqrt[x]}, {x, 0, 100}];
mycolor = Function[{x, y}, If[Mod[x, 5] == 0, Red, Blue]];
ListLinePlot[list2,
  PlotStyle -> AbsolutePointSize[3], ColorFunction -> mycolor, 
  ColorFunctionScaling -> False] /. Line -> Point

进一步发表评论

对于不同的情节标记,我已经恢复了简单的方法。为了在ListPlot中应用不同的样式和绘图标记,不同样式的点必须位于单独的列表中,因此List /@ list2。 (但实际上只需要两个清单。)

Clear[mycolor];
list2 = Table[{x, Sqrt[x]}, {x, 0, 100}];
mycolor[x_] := If[Mod[x, 5] == 0,
   {Red, "\[FilledUpTriangle]", 14},
   {Blue, "\[FilledSmallCircle]", 6}];
mycolorspec = mycolor /@ First /@ list2;
ListPlot[List /@ list2,
 PlotMarkers -> Apply[Style[#2, FontSize -> #3, #1] &,
   mycolorspec, {1}]]

enter image description here