我非常感谢你对我的问题的帮助。 我想在绘制data2时使用适用于data1图的相同颜色函数。 例如:
data1 = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}};
ListPointPlot3D[data1, PlotStyle -> PointSize[0.02],
ColorFunction -> Function[{x, y, z}, RGBColor[x, y, z]]]
接下来我希望以相同的顺序使用以前的颜色绘制另一个数据(相同尺寸)(有一个未知函数将data1转换为data2):
data2 = {{1, 1, 0}, {1, 0, 1}, {0, 1, 1}};
ListPointPlot3D[data2, PlotStyle -> PointSize[0.02],
ColorFunction -> Function[{x, y, z}, fun[x, y, z]]]
但是例如如下的直接试验将不起作用(尽管有趣的[]确实有效):
fun[r_, g_, b_] :=Table[RGBColor[data1[[i]]], {i,
Length[data1]}][[Position[data2, {r, g, b}][[1, 1]]]]
答案 0 :(得分:0)
这里的问题是ListPointPlot3D
获取整数数据并转换为它传递给ColorFunction
的浮点数,因此如果为离散整数定义颜色函数,则无法匹配浮点数。试试这个......(如果使用真实数据,你的方法也可以正常工作)
data1 = N@{{1, 0, 0}, {0, 1, 0}, {0, 0, 1}};
cfun1[x_, y_, z_] := RGBColor[x, y, z]
ListPointPlot3D[data1, PlotStyle -> PointSize[0.02],
ColorFunction -> cfun1]
data2 = N@{{1, 1, 0}, {1, 0, 1}, {0, 1, 1}};
MapThread[ (cfun2[#2[[1]], #2[[2]], #2[[3]]] = cfun1 @@ #1) & ,
{data1, data2}]
ListPointPlot3D[data2, PlotStyle -> PointSize[0.02],
ColorFunction -> cfun2]
稍微偏僻一点,但你可能会更好地处理图形基元,这看起来像这样:
colors = cfun1 /@ data1;
Graphics3D@MapThread[ {#1, Point@#2} & , {colors, data1} ]
Graphics3D@MapThread[ {#1, Point@#2} & , {colors, data2} ]
答案 1 :(得分:0)