programing

ggplot2에서 채우기 색상에 질감을 추가하는 방법

muds 2023. 7. 10. 22:56
반응형

ggplot2에서 채우기 색상에 질감을 추가하는 방법

현재사중입다니용다를 사용하고 .scale_brewer()채움을 위해, 그리고 이것들은 색이 아름다워 보이지만 (화면과 컬러 프린터를 통해) 흑백 프린터를 사용할 때는 회색으로 비교적 균일하게 인쇄됩니다.했습니다.ggplot2문서화되었지만 색상을 채우기 위해 텍스처를 추가하는 것에 대해 아무것도 보지 못했습니다.인 관가있까니습이 있습니까?ggplot2이것을 하는 방법 또는 그들이 사용하는 해킹을 가진 사람이 있습니까?질감이란 검은색과 흰색으로 인쇄할 때 채우기 색을 구분하는 대각선 막대, 역 대각선 막대, 점 패턴 등을 말합니다.

여러분, 여기 아주 기본적인 방식으로 텍스처 문제를 해결하는 약간의 해킹이 있습니다.

한 막대의 테두리를 다른 막대보다 어둡게 만들기

편집: 저는 마침내 ggplot2에서 최소한 3가지 유형의 기본 패턴을 허용하는 이 해킹의 간단한 예를 보여줄 시간을 찾았습니다.코드:

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")

다음을 생성합니다.

enter image description here

그것은 너무 예쁘지는 않지만 내가 생각할 수 있는 유일한 해결책입니다.

보시는 것처럼 저는 매우 기본적인 데이터를 생산합니다.수직선을 가져오려면 수직선을 추가할 변수를 포함하는 데이터 프레임을 만들고 그래프 테두리를 여러 번 다시 그려서 매번 너비를 줄입니다.

수평 라인에 대해서도 유사한 작업이 수행되지만 관심 변수와 관련된 값에서 값(예: '5')을 뺀 각 다시 그리기에 대해 새 데이터 프레임이 필요합니다.바의 높이를 효과적으로 낮춥니다.이는 달성하기에 까다롭고 더 능률적인 접근 방식이 있을 수 있지만, 이는 달성할 수 있는 방법을 보여줍니다.

메시 패턴은 두 가지를 모두 결합한 것입니다.합니다.fill~하듯이fill='transparent'수직선이 그어지지 않도록 합니다.

패턴 업데이트가 있을 때까지, 여러분 중 일부는 이것이 유용하다고 생각하기를 바랍니다.

편집 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"
  )

여기서 각각 다른 좌표를 호출하고 원하는 막대 위에 선을 그리는 gem_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")

이 결과는 다음과 같습니다.

enter image description here

완벽한 각도와 간격을 유지하기 위해 너무 많은 시간을 투자하지 않았기 때문에 다소 엉성하지만 이것은 개념 증명이 될 것입니다.

분명히 선은 반대 방향으로 기울어질 수 있으며 수평 및 수직 맞물림과 매우 유사한 대각선 맞물림의 여지도 있습니다.

패턴 면에서 제가 제공할 수 있는 것은 그 정도라고 생각합니다.누군가 그것의 용도를 찾을 수 있기를 바랍니다.

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

다음 열에 '버블'의 y축 위치가 표시됩니다.

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위의 gg 그림으로 이동하여 '점'을 배치하고 재사용하여 '거품'의 크기를 변경합니다.

+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)

플롯이 실행될 때마다 지터는 '버블'의 위치를 다르게 지정하지만, 다음은 더 좋은 출력 중 하나입니다.

enter image description here

때때로 '거품'은 국경 밖에서 흔들릴 것입니다.이 경우 다시 실행하거나 더 큰 차원으로 내보내기만 하면 됩니다.원하는 경우 Y 축의 각 증분에 더 많은 버블을 표시할 수 있으므로 빈 공간을 더 많이 채울 수 있습니다.

이는 ggplot을 해킹할 수 있는 최대 7개의 패턴(반대의 기울어진 대각선과 대각선 메시를 모두 포함하는 경우)을 구성합니다.

생각해 볼 수 있는 사람이 있으면 언제든지 더 제안해 주세요.

EDIT 4: 저는 ggplot2에서 해치/패턴 자동화를 위한 래퍼 기능을 개발하고 있습니다.facet_grid plot 등에서 패턴을 허용하도록 기능을 확장하면 링크를 올리겠습니다.다음은 간단한 막대 그래프에 대한 함수 입력을 포함한 출력입니다.

enter image description here

공유할 수 있는 기능이 준비되면 마지막 편집을 추가하겠습니다.

EDIT 5: gem_bar plot에 패턴을 추가하는 과정을 조금 더 쉽게 하기 위해 작성한 EggHatch 함수에 대한 링크입니다.

편집 6: 이 솔루션의 간단한 변형을 공유하여 부화된 플롯에 색상을 추가하려고 생각했습니다.

위와 동일한 df를 사용하여 이 코드를 실행합니다.

bar_width = 0.8
xaxislabs <- c("Purple", "Blue", "Green")

ggplot(Example.Data, aes(x=Variable, y=Value, fill=Fill)) +
  theme(legend.position = "none")+
  geom_bar(position=position_dodge(.9), stat="identity", colour="black", legend = FALSE,  width=bar_width, fill="#15a742")+
  geom_bar(data=Example.Data[2, ], position=position_dodge(.9), stat="identity", colour="#FFFFFF", width=(bar_width/7)*5, fill="#FFFFFF")+  
  geom_bar(data=Example.Data[2, ], position=position_dodge(.9), stat="identity", colour="#15a742", width=(bar_width/7)*3, fill="#15a742")+
  geom_bar(data=Example.Data[2, ], position=position_dodge(.9), stat="identity", colour="#FFFFFF", width=(bar_width/7), fill="#FFFFFF")+
  geom_bar(data=Example.Data[2, ], position=position_dodge(.9), stat="identity", colour="black", width=bar_width, fill="transparent")+
  
  geom_bar(data=Example.Data[1, ], position=position_dodge(.9), stat="identity", colour="black", width=bar_width, fill="#8b2fbb")+
  geom_bar(data=Example.Data[1, ], position=position_dodge(.9), stat="identity", colour="#FFFFFF", width=(bar_width/7)*5, fill="#FFFFFF")+
  geom_bar(data=Example.Data[1, ], position=position_dodge(.9), stat="identity", colour="#8b2fbb", width=(bar_width/7)*3, fill="#8b2fbb")+
  geom_bar(data=Example.Data[1, ], position=position_dodge(.9), stat="identity", colour="#FFFFFF", width=(bar_width/7), fill="#FFFFFF")+
  geom_bar(data=Example.Data[1, ], position=position_dodge(.9), stat="identity", colour="black", width=bar_width, fill="transparent")+
  
  
  geom_bar(data=Example.Data[3, ], position=position_dodge(.9), stat="identity", colour="#59a5db", width=bar_width, fill="#59a5db")+
  geom_bar(data=Example.Data[3, ], position=position_dodge(.9), stat="identity", colour="#FFFFFF", width=(bar_width/7)*5, fill="#FFFFFF")+  
  geom_bar(data=Example.Data[3, ], position=position_dodge(.9), stat="identity", colour="#59a5db", width=(bar_width/7)*3, fill="#59a5db")+
  geom_bar(data=Example.Data[3, ], position=position_dodge(.9), stat="identity", colour="#FFFFFF", width=(bar_width/7), fill="#FFFFFF")+
  geom_bar(data=Example.Data[3, ], position=position_dodge(.9), stat="identity", colour="black", width=bar_width, fill="transparent")+
  
  scale_x_discrete(labels= xaxislabs)

다음 그림의 결과:

enter image description here

그리고 이 코드는 다시 위에서 dfs를 사용합니다.

bar_width = 0.8
xaxislabs <- c("Purple", "Blue", "Green")


ggplot(Example.Data, aes(x=Variable, y=Value, fill=Fill)) +
  theme(legend.position = "none")+
  geom_bar(position=position_dodge(.9), stat="identity", colour="black", legend = FALSE,  width=bar_width, fill="#15a742")+
  geom_bar(data=Example.Data[2, ], position=position_dodge(.9), stat="identity", colour="#FFFFFF", width=(bar_width/7)*5, fill="#FFFFFF")+  
  geom_bar(data=Example.Data[2, ], position=position_dodge(.9), stat="identity", colour="#15a742", width=(bar_width/7)*3, fill="#15a742")+
  geom_bar(data=Example.Data[2, ], position=position_dodge(.9), stat="identity", colour="#FFFFFF", width=(bar_width/7), fill="#FFFFFF")+
  geom_bar(data=Example.Data[2, ], position=position_dodge(.9), stat="identity", colour="black", width=bar_width, fill="transparent")+
  
  geom_bar(data=Example.Data[1, ], position=position_dodge(.9), stat="identity", colour="#8b2fbb", size=.5, fill = "#8b2fbb")+
  geom_bar(data=HighlightHorizontal, position=position_dodge(.9), stat="identity", colour="#FFFFFF", size=.5, fill = "#FFFFFF")+
  geom_bar(data=HighlightHorizontal2, position=position_dodge(.9), stat="identity", colour="#8b2fbb", size=.5, fill="#8b2fbb")+
  geom_bar(data=HighlightHorizontal3, position=position_dodge(.9), stat="identity", colour="#FFFFFF", size=.5, fill = "#FFFFFF")+
  geom_bar(data=HighlightHorizontal4, position=position_dodge(.9), stat="identity", colour="#8b2fbb", size=.5, fill="#8b2fbb")+
  geom_bar(data=HighlightHorizontal5, position=position_dodge(.9), stat="identity", colour="#FFFFFF", size=.5, fill = "#FFFFFF")+
  geom_bar(data=HighlightHorizontal6, position=position_dodge(.9), stat="identity", colour="#8b2fbb", size=.5, fill="#8b2fbb")+
  geom_bar(data=HighlightHorizontal7, position=position_dodge(.9), stat="identity", colour="#FFFFFF", size=.5, fill = "#FFFFFF")+
  geom_bar(data=HighlightHorizontal8, position=position_dodge(.9), stat="identity", colour="#8b2fbb", size=.5, fill="#8b2fbb")+
  geom_bar(data=Example.Data[1, ], position=position_dodge(.9), stat="identity", colour="black", size=.5, fill = "transparent")+
  
  geom_bar(data=Example.Data[3, ], position=position_dodge(.9), stat="identity", colour="black", width=bar_width, fill="#59a5db")+
  
  scale_x_discrete(labels= xaxislabs)

결과:

enter image description here

그리드(ggplot2가 실제 도면을 그릴 때 사용하는 그래픽 시스템)가 텍스처를 지원하지 않기 때문에 현재는 불가능합니다.미안!

ggplot에서는 색상표 팔레트를 사용할 수 있습니다.이들 중 일부는 "사진 복사" 친화적입니다.그래서 이런 것이 당신에게 효과가 있을까요?

ggplot(diamonds, aes(x=cut, y=price, group=cut))+
geom_boxplot(aes(fill=cut))+scale_fill_brewer(palette="OrRd")

이 경우 OrRd는 컬러브루어 웹 페이지에서 찾을 수 있는 팔레트입니다. http://colorbrewer2.org/

복사에 친숙함:이것은 지정된 색 구성표가 흑백 복사를 견딜 수 있음을 나타냅니다.분산 구성표를 복사할 수 없습니다.밝기의 차이는 순차적 방식으로 보존해야 합니다.

@clauswilke에 의한 ggtextures 패키지를 사용하여 다음을 사용하여 질감이 있는 직사각형과 막대를 그릴 수 있습니다.ggplot2.

# Image/pattern randomly selected from README
path_image <- "http://www.hypergridbusiness.com/wp-content/uploads/2012/12/rocks2-256.jpg"

library(ggplot2)
# devtools::install_github("clauswilke/ggtextures")
ggplot(mtcars, aes(cyl, mpg)) + 
  ggtextures::geom_textured_bar(stat = "identity", image = path_image)

enter image description here

다른 지오메트리와 결합할 수도 있습니다.

data_raw <- data.frame(x = round(rbinom(1000, 50, 0.1)))
ggplot(data_raw, aes(x)) +
  geom_textured_bar(
    aes(y = ..prop..), image = path_image
  ) +
  geom_density()

enter image description here

나는 방금 소포를 발견했습니다.ggpattern(https://github.com/coolbutuseless/ggpattern) 은 이 문제에 대한 좋은 해결책으로 보이며 ggplot2 워크플로우와 잘 통합됩니다.텍스처를 사용하는 솔루션은 대각선 막대에 대해 잘 작동할 수 있지만 벡터 그래픽을 생성하지 않으므로 최적이 아닙니다.

다음은 ggpattern의 github 저장소에서 직접 가져온 예입니다.

install.packages("remotes")
remotes::install_github("coolbutuseless/ggpattern")

library(ggplot2)
library(ggpattern)

df <- data.frame(level = c("a", "b", "c", 'd'), outcome = c(2.3, 1.9, 3.2, 1))

ggplot(df) +
  geom_col_pattern(
    aes(level, outcome, pattern_fill = level), 
    pattern = 'stripe',
    fill    = 'white',
    colour  = 'black'
  ) +
  theme_bw(18) +
  theme(legend.position = 'none') + 
  labs(
    title    = "ggpattern::geom_pattern_col()",
    subtitle = "pattern = 'stripe'"
  ) +
  coord_fixed(ratio = 1/2)

이 그래프는 다음과 같은 결과를 참조:

ggpattern example plot

만약 몇몇 막대들만 줄무늬가 있어야 한다면,geom_col_pattern()을 가지고 있습니다.pattern_alpha특정 원하지 않는 스트라이프를 완전히 투명하게 만드는 데 사용할 수 있는 인수입니다.

저는 Docconcoct 작업이 훌륭하다고 생각하지만, 지금 저는 갑자기 특별한 패키지를 검색하게 되었습니다--- 패턴 플롯.내부 코드는 보지 못했지만 vignette는 유용한 것 같습니다.

ggrough흥미로울 수 있음: https://xvrdm.github.io/ggrough/

윤곽선이 "텍스트"에 해당하는 더미 데이터 프레임을 만든 다음 gem_contour를 사용하는 것이 유용할 수 있습니다.다음은 제 예입니다.

library(ggplot2)

eg = expand.grid(R1 = seq(0,1,by=0.01), R2 = seq(0,1,by=0.01))
     eg$importance = (eg$R1+eg$R2)/2

  ggplot(eg , aes(x = R1, y = R2)) +
  geom_raster(aes(fill = importance), interpolate=TRUE) +
  scale_fill_gradient2(low="white", high="gray20", limits=c(0,1)) +
  theme_classic()+
  geom_contour(bins=5,aes(z=importance), color="black", size=0.6)+
  coord_fixed(ratio = 1, xlim=c(0,1),ylim=c(0,1))

그 결과는 다음과 같습니다. 선으로 음영 처리된 그래프입니다.

(선은 평활해야 함)

언급URL : https://stackoverflow.com/questions/2895319/how-to-add-texture-to-fill-colors-in-ggplot2

반응형