В настоящее время я использую scale_brewer()
для заполнения, и они выглядят красиво в цвете (на экране и через цветной принтер), но печатают относительно равномерно, как серые, при использовании черно-белого принтера. Я искал документацию онлайн ggplot2
, но ничего не видел о добавлении текстур для заполнения цветов. Есть ли способ ggplot2
для этого или у кого-нибудь есть хак, который они используют? По текстурам я имею в виду такие вещи, как диагональные полосы, обратные диагональные полосы, точечные узоры и т. Д., Которые будут различать цвета заливки при печати в черно-белом режиме.Как добавить текстуру для заполнения цветов в ggplot2?
ответ
ggplot может использовать палитры colorbrewer. Некоторые из них «ксерокопированы». Так что-то вроде этого будет работать для вас?
ggplot(diamonds, aes(x=cut, y=price, group=cut))+
geom_boxplot(aes(fill=cut))+scale_fill_brewer(palette="OrRd")
в этом случае OrRd палитра находится на веб-странице ColorBrewer: http://colorbrewer2.org/
Фотокопия Friendly: Это указывает на то, что данная цветовая схема будет противостоять черно-белый ксерокопирование. Схемы разворота могут быть успешно завершены . Различия в легкости должны быть сохранены с последовательными схемами.
В настоящее время это невозможно, потому что сетка (графическая система, которую ggplot2 использует для фактического рисования) не поддерживает текстуры. Сожалею!
Любые планы добавить gridextra в качестве зависимости, чтобы получить эту функциональность? – russellpierce
Эй люди, вот ди Хак, который решает проблему текстуры в очень основной моде:
ggplot2: make the border on one bar darker than the others using R
EDIT: Я наконец-то нашел время, чтобы дать краткий пример этого хака, что позволяет по крайней мере 3 типа базового шаблона в ggplot2. Код:
Example.Data<- data.frame(matrix(vector(), 0, 3, dimnames=list(c(), c("Value", "Variable", "Fill"))), stringsAsFactors=F)
Example.Data[1, ] <- c(45, 'Horizontal Pattern','Horizontal Pattern')
Example.Data[2, ] <- c(65, 'Vertical Pattern','Vertical Pattern')
Example.Data[3, ] <- c(89, 'Mesh Pattern','Mesh Pattern')
HighlightDataVert<-Example.Data[2, ]
HighlightHorizontal<-Example.Data[1, ]
HighlightMesh<-Example.Data[3, ]
HighlightHorizontal$Value<-as.numeric(HighlightHorizontal$Value)
Example.Data$Value<-as.numeric(Example.Data$Value)
HighlightDataVert$Value<-as.numeric(HighlightDataVert$Value)
HighlightMesh$Value<-as.numeric(HighlightMesh$Value)
HighlightHorizontal$Value<-HighlightHorizontal$Value-5
HighlightHorizontal2<-HighlightHorizontal
HighlightHorizontal2$Value<-HighlightHorizontal$Value-5
HighlightHorizontal3<-HighlightHorizontal2
HighlightHorizontal3$Value<-HighlightHorizontal2$Value-5
HighlightHorizontal4<-HighlightHorizontal3
HighlightHorizontal4$Value<-HighlightHorizontal3$Value-5
HighlightHorizontal5<-HighlightHorizontal4
HighlightHorizontal5$Value<-HighlightHorizontal4$Value-5
HighlightHorizontal6<-HighlightHorizontal5
HighlightHorizontal6$Value<-HighlightHorizontal5$Value-5
HighlightHorizontal7<-HighlightHorizontal6
HighlightHorizontal7$Value<-HighlightHorizontal6$Value-5
HighlightHorizontal8<-HighlightHorizontal7
HighlightHorizontal8$Value<-HighlightHorizontal7$Value-5
HighlightMeshHoriz<-HighlightMesh
HighlightMeshHoriz$Value<-HighlightMeshHoriz$Value-5
HighlightMeshHoriz2<-HighlightMeshHoriz
HighlightMeshHoriz2$Value<-HighlightMeshHoriz2$Value-5
HighlightMeshHoriz3<-HighlightMeshHoriz2
HighlightMeshHoriz3$Value<-HighlightMeshHoriz3$Value-5
HighlightMeshHoriz4<-HighlightMeshHoriz3
HighlightMeshHoriz4$Value<-HighlightMeshHoriz4$Value-5
HighlightMeshHoriz5<-HighlightMeshHoriz4
HighlightMeshHoriz5$Value<-HighlightMeshHoriz5$Value-5
HighlightMeshHoriz6<-HighlightMeshHoriz5
HighlightMeshHoriz6$Value<-HighlightMeshHoriz6$Value-5
HighlightMeshHoriz7<-HighlightMeshHoriz6
HighlightMeshHoriz7$Value<-HighlightMeshHoriz7$Value-5
HighlightMeshHoriz8<-HighlightMeshHoriz7
HighlightMeshHoriz8$Value<-HighlightMeshHoriz8$Value-5
HighlightMeshHoriz9<-HighlightMeshHoriz8
HighlightMeshHoriz9$Value<-HighlightMeshHoriz9$Value-5
HighlightMeshHoriz10<-HighlightMeshHoriz9
HighlightMeshHoriz10$Value<-HighlightMeshHoriz10$Value-5
HighlightMeshHoriz11<-HighlightMeshHoriz10
HighlightMeshHoriz11$Value<-HighlightMeshHoriz11$Value-5
HighlightMeshHoriz12<-HighlightMeshHoriz11
HighlightMeshHoriz12$Value<-HighlightMeshHoriz12$Value-5
HighlightMeshHoriz13<-HighlightMeshHoriz12
HighlightMeshHoriz13$Value<-HighlightMeshHoriz13$Value-5
HighlightMeshHoriz14<-HighlightMeshHoriz13
HighlightMeshHoriz14$Value<-HighlightMeshHoriz14$Value-5
HighlightMeshHoriz15<-HighlightMeshHoriz14
HighlightMeshHoriz15$Value<-HighlightMeshHoriz15$Value-5
HighlightMeshHoriz16<-HighlightMeshHoriz15
HighlightMeshHoriz16$Value<-HighlightMeshHoriz16$Value-5
HighlightMeshHoriz17<-HighlightMeshHoriz16
HighlightMeshHoriz17$Value<-HighlightMeshHoriz17$Value-5
ggplot(Example.Data, aes(x=Variable, y=Value, fill=Fill)) + theme_bw() + #facet_wrap(~Product, nrow=1)+ #Ensure theme_bw are there to create borders
theme(legend.position = "none")+
scale_fill_grey(start=.4)+
#scale_y_continuous(limits = c(0, 100), breaks = (seq(0,100,by = 10)))+
geom_bar(position=position_dodge(.9), stat="identity", colour="black", legend = FALSE)+
geom_bar(data=HighlightDataVert, position=position_dodge(.9), stat="identity", colour="black", size=.5, width=0.80)+
geom_bar(data=HighlightDataVert, position=position_dodge(.9), stat="identity", colour="black", size=.5, width=0.60)+
geom_bar(data=HighlightDataVert, position=position_dodge(.9), stat="identity", colour="black", size=.5, width=0.40)+
geom_bar(data=HighlightDataVert, position=position_dodge(.9), stat="identity", colour="black", size=.5, width=0.20)+
geom_bar(data=HighlightDataVert, position=position_dodge(.9), stat="identity", colour="black", size=.5, width=0.0) +
geom_bar(data=HighlightHorizontal, position=position_dodge(.9), stat="identity", colour="black", size=.5)+
geom_bar(data=HighlightHorizontal2, position=position_dodge(.9), stat="identity", colour="black", size=.5)+
geom_bar(data=HighlightHorizontal3, position=position_dodge(.9), stat="identity", colour="black", size=.5)+
geom_bar(data=HighlightHorizontal4, position=position_dodge(.9), stat="identity", colour="black", size=.5)+
geom_bar(data=HighlightHorizontal5, position=position_dodge(.9), stat="identity", colour="black", size=.5)+
geom_bar(data=HighlightHorizontal6, position=position_dodge(.9), stat="identity", colour="black", size=.5)+
geom_bar(data=HighlightHorizontal7, position=position_dodge(.9), stat="identity", colour="black", size=.5)+
geom_bar(data=HighlightHorizontal8, position=position_dodge(.9), stat="identity", colour="black", size=.5)+
geom_bar(data=HighlightMesh, position=position_dodge(.9), stat="identity", colour="black", size=.5, width=0.80)+
geom_bar(data=HighlightMesh, position=position_dodge(.9), stat="identity", colour="black", size=.5, width=0.60)+
geom_bar(data=HighlightMesh, position=position_dodge(.9), stat="identity", colour="black", size=.5, width=0.40)+
geom_bar(data=HighlightMesh, position=position_dodge(.9), stat="identity", colour="black", size=.5, width=0.20)+
geom_bar(data=HighlightMesh, position=position_dodge(.9), stat="identity", colour="black", size=.5, width=0.0)+
geom_bar(data=HighlightMeshHoriz, position=position_dodge(.9), stat="identity", colour="black", size=.5, fill = "transparent")+
geom_bar(data=HighlightMeshHoriz2, position=position_dodge(.9), stat="identity", colour="black", size=.5, fill = "transparent")+
geom_bar(data=HighlightMeshHoriz3, position=position_dodge(.9), stat="identity", colour="black", size=.5, fill = "transparent")+
geom_bar(data=HighlightMeshHoriz4, position=position_dodge(.9), stat="identity", colour="black", size=.5, fill = "transparent")+
geom_bar(data=HighlightMeshHoriz5, position=position_dodge(.9), stat="identity", colour="black", size=.5, fill = "transparent")+
geom_bar(data=HighlightMeshHoriz6, position=position_dodge(.9), stat="identity", colour="black", size=.5, fill = "transparent")+
geom_bar(data=HighlightMeshHoriz7, position=position_dodge(.9), stat="identity", colour="black", size=.5, fill = "transparent")+
geom_bar(data=HighlightMeshHoriz8, position=position_dodge(.9), stat="identity", colour="black", size=.5, fill = "transparent")+
geom_bar(data=HighlightMeshHoriz9, position=position_dodge(.9), stat="identity", colour="black", size=.5, fill = "transparent")+
geom_bar(data=HighlightMeshHoriz10, position=position_dodge(.9), stat="identity", colour="black", size=.5, fill = "transparent")+
geom_bar(data=HighlightMeshHoriz11, position=position_dodge(.9), stat="identity", colour="black", size=.5, fill = "transparent")+
geom_bar(data=HighlightMeshHoriz12, position=position_dodge(.9), stat="identity", colour="black", size=.5, fill = "transparent")+
geom_bar(data=HighlightMeshHoriz13, position=position_dodge(.9), stat="identity", colour="black", size=.5, fill = "transparent")+
geom_bar(data=HighlightMeshHoriz14, position=position_dodge(.9), stat="identity", colour="black", size=.5, fill = "transparent")+
geom_bar(data=HighlightMeshHoriz15, position=position_dodge(.9), stat="identity", colour="black", size=.5, fill = "transparent")+
geom_bar(data=HighlightMeshHoriz16, position=position_dodge(.9), stat="identity", colour="black", size=.5, fill = "transparent")+
geom_bar(data=HighlightMeshHoriz17, position=position_dodge(.9), stat="identity", colour="black", size=.5, fill = "transparent")
Производит это:
Это не супер красиво, но это единственное решение, которое я могу думать о.
Как видно, я создаю некоторые очень простые данные. Чтобы получить вертикальные линии, я просто создаю фрейм данных, чтобы содержать переменную, к которой я хотел добавить вертикальные линии, и несколько раз уменьшал границы графа, уменьшая ширину каждый раз.
Аналогичная задача выполняется для горизонтальных линий, но для каждого перерисовки требуется новый кадр данных, где я вычитал значение (в моем примере «5») из значения, связанного с интересующей переменной. Эффективное снижение высоты штанги. Это неудобно для достижения, и могут быть более оптимизированные подходы, но это иллюстрирует, как это может быть достигнуто.
Сетка представляет собой комбинацию того и другого. Сначала нарисуйте вертикальные линии, а затем добавьте горизонтальные линии, установив fill
как fill='transparent'
, чтобы гарантировать, что вертикальные линии не нарисованы.
До тех пор, пока не появится обновление шаблона. Я надеюсь, что некоторые из вас сочтут это полезным.
EDIT 2:
Кроме диагональные узоры также могут быть добавлены. Я добавил дополнительную переменную в кадре данных:
Example.Data[4,] <- c(20, 'Diagonal Pattern','Diagonal Pattern')
Затем я создал новый кадр данных для хранения координат для диагональных линий:
Diag <- data.frame(
x = c(1,1,1.45,1.45), # 1st 2 values dictate starting point of line. 2nd 2 dictate width. Each whole = one background grid
y = c(0,0,20,20),
x2 = c(1.2,1.2,1.45,1.45), # 1st 2 values dictate starting point of line. 2nd 2 dictate width. Each whole = one background grid
y2 = c(0,0,11.5,11.5),# inner 2 values dictate height of horizontal line. Outer: vertical edge lines.
x3 = c(1.38,1.38,1.45,1.45), # 1st 2 values dictate starting point of line. 2nd 2 dictate width. Each whole = one background grid
y3 = c(0,0,3.5,3.5),# inner 2 values dictate height of horizontal line. Outer: vertical edge lines.
x4 = c(.8,.8,1.26,1.26), # 1st 2 values dictate starting point of line. 2nd 2 dictate width. Each whole = one background grid
y4 = c(0,0,20,20),# inner 2 values dictate height of horizontal line. Outer: vertical edge lines.
x5 = c(.6,.6,1.07,1.07), # 1st 2 values dictate starting point of line. 2nd 2 dictate width. Each whole = one background grid
y5 = c(0,0,20,20),# inner 2 values dictate height of horizontal line. Outer: vertical edge lines.
x6 = c(.555,.555,.88,.88), # 1st 2 values dictate starting point of line. 2nd 2 dictate width. Each whole = one background grid
y6 = c(6,6,20,20),# inner 2 values dictate height of horizontal line. Outer: vertical edge lines.
x7 = c(.555,.555,.72,.72), # 1st 2 values dictate starting point of line. 2nd 2 dictate width. Each whole = one background grid
y7 = c(13,13,20,20),# inner 2 values dictate height of horizontal line. Outer: vertical edge lines.
x8 = c(.8,.8,1.26,1.26), # 1st 2 values dictate starting point of line. 2nd 2 dictate width. Each whole = one background grid
y8 = c(0,0,20,20),# inner 2 values dictate height of horizontal line. Outer: vertical edge lines.
#Variable = "Diagonal Pattern",
Fill = "Diagonal Pattern"
)
Оттуда я добавил geom_paths к ggplot выше с каждым один вызывая различные координаты и рисование линий над нужной строкой:
+geom_path(data=Diag, aes(x=x, y=y),colour = "black")+ # calls co-or for sig. line & draws
geom_path(data=Diag, aes(x=x2, y=y2),colour = "black")+ # calls co-or for sig. line & draws
geom_path(data=Diag, aes(x=x3, y=y3),colour = "black")+
geom_path(data=Diag, aes(x=x4, y=y4),colour = "black")+
geom_path(data=Diag, aes(x=x5, y=y5),colour = "black")+
geom_path(data=Diag, aes(x=x6, y=y6),colour = "black")+
geom_path(data=Diag, aes(x=x7, y=y7),colour = "black")
Это приводит к следующему:
Это немного неаккуратно, как я не вкладывать слишком много времени в получении линии идеально под углом и на расстоянии друг от друга, но это должно служить доказательством концепции.
Очевидно, что линии могут наклоняться в противоположном направлении, а также есть место для диагональной сетки, подобно горизонтальной и вертикальной сетке.
Я думаю, что это все, что я могу предложить на рисунке спереди. Надеюсь, что кто-то найдет для этого пользу.
EDIT 3: Знаменитые последние слова. Я придумал другой вариант шаблона. На этот раз с помощью geom_jitter
.
Опять же я добавил еще одну переменную в кадре данных:
Example.Data[5,] <- c(100, 'Bubble Pattern','Bubble Pattern')
И я заказал, как я хотел каждый образец, представленный:
Example.Data$Variable = Relevel(Example.Data$Variable, ref = c("Diagonal Pattern", "Bubble Pattern","Horizontal Pattern","Mesh Pattern","Vertical Pattern"))
Затем я создал столбец содержит номер, связанный с предполагаемая целевая полоса на оси x:
Example.Data$Bubbles <- 2
Последующие столбцы для обозначения в положениях на оси у из «пузырьков»:
Example.Data$Points <- c(5, 10, 15, 20, 25)
Example.Data$Points2 <- c(30, 35, 40, 45, 50)
Example.Data$Points3 <- c(55, 60, 65, 70, 75)
Example.Data$Points4 <- c(80, 85, 90, 95, 7)
Example.Data$Points5 <- c(14, 21, 28, 35, 42)
Example.Data$Points6 <- c(49, 56, 63, 71, 78)
Example.Data$Points7 <- c(84, 91, 98, 6, 12)
Наконец я добавил geom_jitter
S к ggplot выше, используя новые столбцы для позиционирования и повторного использования «Точки», чтобы варьировать размер из ' пузыри:
+geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points, size=Points), alpha=.5)+
geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points2, size=Points), alpha=.5)+
geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points, size=Points), alpha=.5)+
geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points2, size=Points), alpha=.5)+
geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points3, size=Points), alpha=.5)+
geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points4, size=Points), alpha=.5)+
geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points, size=Points), alpha=.5)+
geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points2, size=Points), alpha=.5)+
geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points, size=Points), alpha=.5)+
geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points2, size=Points), alpha=.5)+
geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points3, size=Points), alpha=.5)+
geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points4, size=Points), alpha=.5)+
geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points2, size=Points), alpha=.5)+
geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points5, size=Points), alpha=.5)+
geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points5, size=Points), alpha=.5)+
geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points6, size=Points), alpha=.5)+
geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points6, size=Points), alpha=.5)+
geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points7, size=Points), alpha=.5)+
geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points7, size=Points), alpha=.5)+
geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points, size=Points), alpha=.5)+
geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points2, size=Points), alpha=.5)+
geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points, size=Points), alpha=.5)+
geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points2, size=Points), alpha=.5)+
geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points3, size=Points), alpha=.5)+
geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points4, size=Points), alpha=.5)+
geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points, size=Points), alpha=.5)+
geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points2, size=Points), alpha=.5)+
geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points, size=Points), alpha=.5)+
geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points2, size=Points), alpha=.5)+
geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points3, size=Points), alpha=.5)+
geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points4, size=Points), alpha=.5)+
geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points2, size=Points), alpha=.5)+
geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points5, size=Points), alpha=.5)+
geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points5, size=Points), alpha=.5)+
geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points6, size=Points), alpha=.5)+
geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points6, size=Points), alpha=.5)+
geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points7, size=Points), alpha=.5)+
geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points7, size=Points), alpha=.5)
Каждый раз, когда участок находится в ведении позиции дрожании „пузыри“ по-разному, но вот один из самых приятных выходных я имел:
Иногда «пузыри» дрожат вне границ. Если это повторится или просто экспортируется в больших размерах. На каждом приращении по оси y могут отображаться больше пузырьков, которые будут заполнять больше пробела, если вы этого желаете.
Это составляет до 7 шаблонов (если вы используете противоположные наклонные диагональные линии и диагональную сетку обоих), которые можно взломать в ggplot.
Пожалуйста, не стесняйтесь предлагать больше, если кто-нибудь может подумать о некоторых.
EDIT 4: Я работал над функцией обертки для автоматизации штриховки/шаблонов в ggplot2. Я отправлю ссылку, как только я расширил функцию, которая позволяет модели в facet_grid участков и т.д. Вот выход с входом функции для простого сюжета брусков в качестве примера:
Я буду добавьте последнее редактирование после того, как у меня есть функция, готовая поделиться.
EDIT 5: Here's a link к функции EggHatch, которую я написал, чтобы сделать процесс добавления шаблонов к графикам geom_bar немного проще.
- 1. ggplot2: несколько цветов в stat_summary
- 2. разных цветов для точек в ggplot2
- 3. Ручная настройка групповых цветов для ggplot2
- 4. Отображать шестнадцатеричные коды для цветов ggplot2 использует
- 5. Использование цветов в функции aes() в ggplot2
- 6. Как вы создаете градиент цветов для дискретной переменной в ggplot2?
- 7. Добавить inputListener в текстуру
- 8. ggplot2 - неправильная область заполнения области
- 9. Сопряжение цветов с факторами в ggplot2
- 10. Как добавить больше цветов для построения в R
- 11. Свяжите палитру цветов с темой ggplot2
- 12. с использованием других цветов в ggplot2
- 13. Как изменить порядок дискретных цветов в легенде в ggplot2
- 14. Как добавить текстуру с CylinderGeometry
- 15. Как получить определенное количество случайных цветов для заполнения сетки - C#
- 16. MiniMagick - добавить текстуру изображения
- 17. Как установить несколько цветов в ggplot2 stat_summary plot?
- 18. Преобразование цветов вершин в УФ-текстуру в meshlab
- 19. Как добавить текстуру в сустав в SpriteKit?
- 20. ggplot2 страница заполнения участка в ландшафтном (PDF)
- 21. Java. Как добавить больше цветов для рисования?
- 22. ggplot2: Как указать несколько цветов заливки для точек, соединенных линиями разных цветов
- 23. Назначение стабильных цветов для штрихового графика ggplot2 со слоем
- 24. Как установить диапазон цветов scale_colour_brewer() в ggplot2? (Палитра выбрана)
- 25. как добавить errorbar в ggplot2
- 26. R ggplot2 сопоставление цветов с geom_hline
- 27. Добавить текстуру в 2D-элемент
- 28. Невозможно добавить текстуру в GL_QUAD
- 29. Удаление всех цветов из строки line ggplot2
- 30. ggplot2: Коробки с точками и разделение заполнения
[решение gridSVG для основного вопроса сетки] (http://stackoverflow.com/questions/26110160/how-to-apply-cross-hatching-to-a-polygon-using-the-grid-graphical- system/26110400 # 26110400) – baptiste