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函数。