根据标签,Mathematica中的着色图

时间:2011-10-29 18:18:15

标签: 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 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]]
          ]
        ]
    ]

预期结果:

expected result of visualization

2 个答案:

答案 0 :(得分: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]];

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

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]

plot

修改

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

ListPlot3D[points, VertexColors -> labels /. rules, Mesh -> False]

colouring points in a ListPlot3D

答案 1 :(得分:3)

例如:

(* 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]

enter image description here