Wolfram mathematica 根据标签在Mathematica中着色绘图

Wolfram mathematica 根据标签在Mathematica中着色绘图,wolfram-mathematica,plot,Wolfram Mathematica,Plot,我有一个带有标签的数据集,我想用根据标签上色的点来绘制它。有没有一种简单的方法来获取绘图中的当前线号,以便我可以确定该点属于哪个类别 我知道x,y,z是打印数据的坐标,但它对外部标签没有帮助 这非常难看,它只适用于具有规则分布的排序数据集 data = Import["http://ftp.ics.uci.edu/pub/machine-learning-databases/iris/iris.data"]; data = Drop[data, -1]; (*there one

我有一个带有标签的数据集,我想用根据标签上色的点来绘制它。有没有一种简单的方法来获取绘图中的当前线号,以便我可以确定该点属于哪个类别

我知道
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]]
          ]
        ]
    ]
data=Import[“http://ftp.ics.uci.edu/pub/machine-learning-databases/iris/iris.data"];
数据=下降[数据,-1];(*末尾有一个额外的行*)
inData=数据[[全部,1;;4]];
标签=数据[[全部,5]];
ListPlot3D[inData,
颜色函数->
函数[{x,y,z},
如果[y<0.33,RGB颜色[1,1,0],
如果[y<0.66,RGBColor[1,0,0.],RGBColor[1,0,1]]
]
]
]
预期结果:

例如:

(* Build the labeled structure and take a random permutation*)
f[x_, y_] = Sqrt[100 - x x - y y];
l = RandomSample@Flatten[{Table[{{"Lower", {x, y, f[x, y] - 5}},
                                 {"Upper", {x, y, 5 - f[x, y]}}},
                          {x, -5, 5, .1}, {y, -5, 5, .1}]}, 3];
(*Plot*)

Graphics3D[
 Riffle[l[[All, 1]] /. {"Lower" -> Red, "Upper" -> Green}, 
  Point /@ l[[All, 2]]], Axes -> True]

假设
是坐标列表,而
标签
是相应标签的列表,例如

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]];
ListPlot3D[points, VertexColors -> labels /. rules, Mesh -> False]
每个标签对应一种颜色,我将其作为一个规则列表来编写,例如

rules = {"label a" -> RGBColor[1, 1, 0], 
   "label b" -> RGBColor[1, 0, 0], "label c" -> RGBColor[1, 0, 1]};
然后,可以按照其标签对应的颜色绘制点,如下所示

ListPointPlot3D[Pick[points, labels, #] & /@ Union[labels], 
   PlotStyle -> Union[labels] /. rules]

编辑

例如,要为
ListPlot3D
中的各个点上色,可以使用
顶点颜色

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]];
ListPlot3D[points, VertexColors -> labels /. rules, Mesh -> False]

数据集中的标签在哪里?请描述结构标签是字符串,可以用数字或RGB颜色替换,这并不重要问题仍然不完全清楚,一个示例数据集就好了。您需要绘制单独的点还是曲面?数据的格式是什么?建议:你能按类别将你的观点分开,并单独绘制每个类别吗
GatherBy
可能有用。我已经编辑了这个问题,希望它更清楚。在这种情况下,我更喜欢表面,因为它似乎更容易理解。有4个参数使其更加困难。选择其中三个是visualizationList的另一个选项…3D[{}]将使用三个作为输入。在
inData
中有四维向量,这对于单点来说很好,我想象的是用于演示多维数据的东西,比如使用
Pick
时的右图,各层相互覆盖。无论如何,谢谢你的快速回答@汤姆巴特:我已经扩展了我的答案。非常好,非常感谢!有一个小问题,提供的列表有维度{150,1},我需要维度{150,4}。我对Mathematica很陌生,所以语法对我来说仍然是个谜。我将它重写为
ListPlot3D[点、顶点颜色->{Map[({{}、{}、{}、{}、}、}标签]/.rules},Mesh->False]
,效果非常好:)这对于三维数据非常好,我还需要一些。我应该写在问题里,无论如何谢谢你的回答,我以前不知道Riffle函数。