根据标签,Mathematica中的着色图

Tom*_*art 5 plot wolfram-mathematica

我有一个带有标签的数据集,我想用根据标签着色的点进行绘图.有一个简单的方法如何在绘图中获取当前行数,以便我可以确定该点属于哪个类别?

我知道这x,y,z是绘制数据的坐标,但它对外部标签没有帮助.

这非常难看,它仅适用于具有常规分布的已排序数据集.

    data = Import["http://ftp.ics.uci.edu/pub/machine-learning-databases/iris/iris.data"];
    data = Drop[data, -1]; (*there one extra line at the end*)
    inData = data[[All, 1 ;; 4]];
    labels = data[[All, 5]];
    ListPlot3D[inData,
      ColorFunction -> 
        Function[{x, y, z}, 
          If[y < 0.33, RGBColor[1, 1, 0.], 
               If[y < 0.66, RGBColor[1, 0, 0.], RGBColor[1, 0, 1]]
          ]
        ]
    ]
Run Code Online (Sandbox Code Playgroud)

预期结果:

预期的可视化结果

Hei*_*ike 5

例如,假设这points是坐标labels列表和相应标签的列表

points = Flatten[Table[{i, j, Sin[i j]}, 
   {i, 0, Pi, Pi/20}, {j, 0, Pi, Pi/10}], 1];
labels = RandomChoice[{"label a", "label b", "label c"}, Length[points]];
Run Code Online (Sandbox Code Playgroud)

每个标签对应一种颜色,我将其作为规则列表编写,例如

rules = {"label a" -> RGBColor[1, 1, 0], 
   "label b" -> RGBColor[1, 0, 0], "label c" -> RGBColor[1, 0, 1]};
Run Code Online (Sandbox Code Playgroud)

然后可以按照与其标签相对应的颜色绘制点,如下所示

ListPointPlot3D[Pick[points, labels, #] & /@ Union[labels], 
   PlotStyle -> Union[labels] /. rules]
Run Code Online (Sandbox Code Playgroud)

情节

编辑

例如,要为ListPlot3D您可以使用的各个点着色VertexColors

ListPlot3D[points, VertexColors -> labels /. rules, Mesh -> False]
Run Code Online (Sandbox Code Playgroud)

ListPlot3D中的着色点