【发布时间】:2011-04-22 08:08:14
【问题描述】:
这与 Mathematica 中 Simon 的 question on changing default ColorData 有关。虽然这些解决方案都解决了在线图中更改ColorData 的问题,但我并没有发现讨论对更改ContourPlot/ArrayPlot/Plot3D 等中的ColorFunction/ColorData 有帮助。
TLDR:有没有办法让 mma 在 ArrayPlot/ContourPlot/等中使用自定义颜色。
考虑以下我在 MATLAB 中创建的函数
sin(x^2+y^3) 的示例图:
现在在 mma 中做同样的事情:
xMax = 3; yMax = 3;
img = Transpose@
Table[Sin[y ^3 + x^2], {x, -xMax, xMax, 0.01}, {y, -yMax, yMax,
0.01}];
plot = ArrayPlot[img, ColorFunction -> ColorData["Rainbow"],
AspectRatio -> 1,
FrameTicks -> {FindDivisions[{0, (img // Dimensions // First) - 1},
4], FindDivisions[{0, (img // Dimensions // Last) - 1}, 4],
None, None},
DataReversed ->
True] /. (FrameTicks -> {x_,
y_}) :> (FrameTicks -> {x /. {a_?NumericQ, b_Integer} :> {a,
2 xMax (b/((img // Dimensions // First) - 1) - 1/2)},
y /. {a_?NumericQ, b_Integer} :> {a,
2 yMax (b/((img // Dimensions // Last) - 1) - 1/2)}})
我得到以下情节:
我更喜欢 MATLAB 中丰富、明亮的颜色,而不是 mma 柔和/暗淡的颜色。如果我有来自 MATLAB 的颜色图的 RGB 值,如何让 mma 使用这些颜色?
您可以在 MATLAB 中下载默认颜色图的 RGB 值,并将其导入 mma 为
cMap = Transpose@Import["path-to-colorMapJet.mat", {"HDF5",
"Datasets", "cMap"}];
cMap 是一个64x3 数组,由0 和1 之间的值组成。
只是为了给你一些背景知识,这里有一些来自 MathWorks documentation on colormap的相关文本
颜色图是一个 m×3 实数矩阵 0.0 到 1.0 之间的数字。每一行 是一个 RGB 向量,它定义了一个 颜色。颜色图的第 k 行 定义第 k 个颜色,其中 map(k,:) = [r(k) g(k) b(k)]) 指定红色、绿色和蓝色的强度。
这里是map=cMap 和m=64。
我尝试戳ColorDataFunction,发现ColorData 格式类似于colormap。但是,我不确定如何让ArrayPlot 使用它(并且大概它应该与其他绘图功能相同)。
另外,由于我在这里的练习纯粹是为了在 mma 中达到一定程度的舒适度,类似于我在 MATLAB 中的练习,我很感激 cmets 和关于改进我的代码的建议。具体来说,我对“修复”FrameTicks 的方法不太满意……肯定有更好/更简单的方法来做到这一点。
【问题讨论】:
-
您是否尝试过使用 ColorData["LightTemperatureMap"] 或 ColorData["TemperatureMap"] 而不是“Rainbow”?这些会产生更明亮的情节。
-
有比 yoda 年长的研究生导师吗?