В настоящее время я использую scale_brewer()
для заливки, и они выглядят красиво в цвете (на экране и на цветном принтере), но печатают относительно равномерно как серые при использовании черно-белого принтера. Я просмотрел онлайн- ggplot2
документацию, но ничего не нашел о добавлении текстур для заливки цветов. Есть ли официальный ggplot2
способ сделать это или у кого-нибудь есть хак, который они используют? Под текстурами я имею в виду такие вещи, как диагональные полосы, перевернутые диагональные полосы, точечные узоры и т. Д., Которые будут различать цвета заливки при печати в черном и белом.
103
Ответы:
ggplot может использовать палитры Colorbrewer. Некоторые из них подходят для «фотокопий». Так что, мэйб, тебе подойдет что-то подобное?
в данном случае OrRd - это палитра, которую можно найти на веб-странице colorbrewer: http://colorbrewer2.org/
источник
Привет, ребята, вот небольшой прием, который решает проблему с текстурой очень простым способом:
ggplot2: сделать границу на одной панели темнее, чем на других, используя R
РЕДАКТИРОВАТЬ: Наконец-то я нашел время, чтобы привести краткий пример этого хака, который позволяет использовать как минимум 3 типа базового шаблона в ggplot2. Код:
Производит это:
Это не очень красиво, но это единственное решение, о котором я могу думать.
Как видно, я привожу очень базовые данные. Чтобы получить вертикальные линии, я просто создаю фрейм данных, содержащий переменную, к которой я хотел добавить вертикальные линии, и перерисовывал границы графика в несколько раз, каждый раз уменьшая ширину.
То же самое делается для горизонтальных линий, но для каждой перерисовки необходим новый фрейм данных, где я вычитал значение (в моем примере «5») из значения, связанного с интересующей переменной. Эффективно снижает высоту штанги. Этого сложно достичь, и могут быть более оптимизированные подходы, но это показывает, как этого можно достичь.
Сетчатый узор представляет собой комбинацию обоих. Сначала нарисуйте вертикальные линии, а затем добавьте настройки горизонтальных линий
fill
какfill='transparent'
обеспечить вертикальные линии не рисуются более.Я надеюсь, что некоторые из вас сочтут это полезным до тех пор, пока не будет обновления шаблона.
РЕДАКТИРОВАТЬ 2:
Дополнительно могут быть добавлены диагональные узоры. Я добавил во фрейм данных дополнительную переменную:
Затем я создал новый фрейм данных для хранения координат диагональных линий:
Оттуда я добавил geom_paths в ggplot выше, каждый из которых вызывает разные координаты и рисует линии над желаемой полосой:
Это приводит к следующему:
Это немного небрежно, так как я не тратил слишком много времени на то, чтобы линии были идеально наклонены и разнесены, но это должно служить подтверждением концепции.
Очевидно, что линии могут наклоняться в противоположном направлении, и есть место для диагональной сетки, как и для горизонтальной и вертикальной сетки.
Думаю, это все, что я могу предложить в области выкройки. Надеюсь, кто-нибудь найдет ему применение.
РЕДАКТИРОВАТЬ 3: Знаменитые последние слова. Я придумал другой вариант выкройки. На этот раз используя
geom_jitter
.Я снова добавил еще одну переменную во фрейм данных:
И я заказал, как я хотел представить каждый узор:
Затем я создал столбец, содержащий число, связанное с предполагаемой целевой полосой на оси x:
За ними следуют столбцы, содержащие позиции по оси Y «пузырей»:
Наконец, я добавил
geom_jitter
s в ggplot выше, используя новые столбцы для позиционирования и повторно используя 'Points' для изменения размера 'пузырей':Каждый раз, когда запускается график, джиттер позиционирует «пузыри» по-разному, но вот один из лучших результатов, которые у меня были:
Иногда «пузыри» будут дрожать за пределами границ. Если это произойдет, перезапустите или просто экспортируйте в большем размере. На каждом приращении оси Y можно нанести больше пузырьков, которые при желании заполнят больше пустого пространства.
Это составляет до 7 паттернов (если вы включаете противоположные наклонные диагональные линии и диагональную сетку обоих), которые можно взломать в ggplot.
Пожалуйста, не стесняйтесь предлагать больше, если кто-то может подумать над некоторыми.
РЕДАКТИРОВАТЬ 4: Я работал над функцией-оболочкой для автоматизации штриховки / шаблонов в ggplot2. Я отправлю ссылку, как только расширю функцию, чтобы разрешить шаблоны в графиках facet_grid и т. Д. Вот результат с входом функции для простого графика столбцов в качестве примера:
Я добавлю одно последнее изменение, как только у меня будет готово поделиться функцией.
РЕДАКТИРОВАТЬ 5: Вот ссылка на функцию EggHatch, которую я написал, чтобы немного упростить процесс добавления паттернов на графики geom_bar.
источник
В настоящее время это невозможно, потому что сетка (графическая система, которую ggplot2 использует для рисования) не поддерживает текстуры. Сожалею!
источник
Вы можете использовать пакет ggtextures от @claus wilke для рисования текстурированных прямоугольников и полос
ggplot2
.Вы также можете комбинировать его с другими геометриями:
источник
Я только что обнаружил пакет под названием
ggpattern
( https://github.com/coolbutuseless/ggpattern ), который кажется хорошим решением этой проблемы и прекрасно интегрируется с рабочим процессом ggplot2. Хотя решения, использующие текстуры, могут нормально работать для диагональных полос, они не будут создавать векторную графику и поэтому не являются оптимальными.Вот пример, взятый прямо из репозитория ggpattern на github:
что приводит к этому сюжету:
Если бы только некоторые полосы были полосатыми,
geom_col_pattern()
естьpattern_alpha
аргумент, который можно использовать, чтобы сделать некоторые нежелательные полосы полностью прозрачными.источник
Я думаю, что работа с Docconcoct - это здорово, но теперь я неожиданно загуглил специальный пакет - Patternplot . Не видел внутреннего кода, но виньетка кажется полезной.
источник
ggrough
может быть интересно: https://xvrdm.github.io/ggrough/источник
Может быть полезно создать фиктивный фрейм данных, контуры которого соответствуют «текстурам», а затем использовать geom_contour. Вот мой пример:
И вот результат: заштрихованный участок с линиями
(линии должны быть сглажены)
источник