Задача такая: нужно взять какую-то стандартную цветовую гамму, например, "AvocadoColors", и модифицировать ее, получив в итоге другую гамму, готовую к использованию. В моем конкретном случае модификация заключается в том, что на гамму градиентно накладываются две белые полосы. Вот результат:
Вот реализация:
Код:
pS = 30;
a1 = 0.25; a2 = 0.75;
Color = Lighter[ColorData["BlueGreenYellow"][#],1/Cosh[(# - a1) pS] + 1/Cosh[(# - a2) pS]] &;
Но при такой реализации возникает проблема: на работу с такой гаммой уходит много времени. В результате значительно возрастает время обработки любого графика с этой гаммой.
Может быть кто-то может подсказать как эту задачу можно решить более оптимальным способом?
И еще пару мелких вопросов
При работе с DensityPlot[f[x,y],...] по умолчанию включена функция ColorFunctionScaling, которая переводит границы изменения функции f[x,y] на отрезок [0,1]. Эту функцию можно отключить и вручную настраивать отображение множества значений функции f[x,y] в цветовую гамму(например, через такую функцию Color[], как написано выше). Но вопрос немного не об этом:) Есть ли возможность какой-либо настройки параметра PlotLegends – например, сделать так чтобы гамма на легенде соответствовала большему интервалу, чем интервал изменения функции f[x,y]. Например, пусть f[x,y] меняется от 1 до 2. Я хочу разукрасить ее с запасом, предполагая, что когда-нибудь эта функция может принять значения большие 2, но, например, не выше 3. Поэтому я отображаю ее значения не во всю цветовую гамму, а только в ее первую половину(т.е. полная цветовая гамма у меня получается при изменении аргумента функции Color[] от 1 до 3). Но тогда появляется проблема с PlotLegends – на ней тоже только половина гаммы, т.е. только те значения, которые принимает f[x,y]. А мне нужно чтобы там была вся гамма полностью.
Если вы поняли, что я имею в виду, подскажите как решить эту проблему. Мне пришлось отдельно нарисовать нужную легенду и вставить ее в код в виде картинки: PlotLegends -> Placed[Show[(*здесь стоит картинка*)], After]. Ну понятно, что это уродство какое-то, но по другому как-то не получилось.
Еще вопросы:
1. DensityPlot рисует графики с какими-то белыми полями между осями и самим графиком. Они видны, например, на рисунке гаммы выше: там эти поля около 1 мм., но при больших графиках они становятся больше и гораздо заметнее. Можно ли их как-нибудь убрать?
2. Можно ли настроить размер координат на PlotLegends? (обычно это функция TicksStyle или еще что такое)
И еще один серьезный вопрос: есть ли какой-то более удобный и более мощный чем Математика пакет, заточенный под визуализацию? А то в математике как-то много проблем возникает с какими-нибудь не совсем тривиальными графиками.
-- 11.10.2014, 00:39 --Еще вопрос. Допустим мне нужно наделать картинок, каждая из которых состоит из двух графиков (один под другим). Оси Х в них одни и те же. Как мне выровнять эти графики так, чтобы их оси были ровно одна под другой? Пока у меня получается так:
Правые края рамок выравнены так как надо, а левые сдвинуты по отношению друг к другу. Код в этом случае выглядит примерно так:
TableForm[{Show[Image[Plot[...]]], Show[Image[Plot[...]]]}]