Это связано с вопросом Саймона об изменении ColorData по умолчанию в Mathematica. В то время как все решения касались проблемы изменения ColorData
в линейных графиках, я не совсем нашел обсуждение полезным в изменении ColorFunction
/ ColorData
в ] ContourPlot
/ ArrayPlot
/ Plot3D
и т. Д.
TL; DR:
Теперь проделав то же самое в 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. Как мне заставить mma использовать эти цвета, если у меня есть значения RGB цветовой карты из MATLAB?
Вы можете загрузить значения RGB цветовой карты по умолчанию в MATLAB и импортировать их в mma как
cMap = Transpose@Import["path-to-colorMapJet.mat", {"HDF5", "Datasets", "cMap"}];
cMap
] представляет собой массив64x3
значений между0
и1
.Чтобы дать вам некоторую предысторию, вот некоторый относящийся к делу текст из документации MathWorks по карте цветов.
Карта цветов - это матрица реальных числа от 0,0 до 1,0. Каждый ряд - вектор RGB, определяющий один цвет. K-я строка цветовой карты определяет k-й цвет, где map (k, :) = [r (k) g (k) b (k)]) определяет интенсивность красного, зеленого и синего цветов.
Здесь
map = cMap
иm = 64
].Я попытался ковыряться в
ColorDataFunction
и увидел, что форматColorData
похож на цветовую карту. Однако я не уверен, как заставить
ArrayPlot
использовать его (и, по-видимому, он должен быть таким же для других функций построения графиков).Кроме того, поскольку мое упражнение здесь предназначено исключительно для достижения уровня комфорта в mma, аналогично тому, что у меня есть в MATLAB, я был бы признателен за комментарии и предложения по улучшению моего кода. В частности, я не очень доволен своим советом по "исправлению"
FrameTicks
... безусловно, должен быть более приятный / простой способ сделать это.