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)
预期结果:
例如,假设这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)