Mathematica重复使用另一个图的ColorFunction

时间:2016-01-20 15:39:43

标签: wolfram-mathematica

我非常感谢你对我的问题的帮助。 我想在绘制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]]]]

2 个答案:

答案 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)

使用html.sublime-snippet图表的data1选项中PlotStyle的颜色。 data2中的指令列表引用了每个数据系列,因此您必须使每个点都成为自己的数据系列。我还认为值可能不在0到1之间,因此重新调整它们PlotStyle使用data2

RGBColor

enter image description here

ListPointPlot3D[data1, PlotStyle -> PointSize[0.02], 
 ColorFunction -> Function[{x, y, z}, RGBColor[x, y, z]]]

enter image description here

希望这有帮助。