2017-02-12 1 views
1

두 막대 막대를 서로 겹치지 않고 겹치려고합니다. 데이터가 동일한 데이터 세트에 있습니다. x 축에 '블록'을 표시하고 '시작'및 '끝'을 막대 그래프로 겹쳐서 표시합니다. 나는 또한geom_bar()로 두 막대 막대를 오버레이합니다.

ggplot(my_data,aes(x=Block,y=Start))+ 
     geom_bar(data=my_data$End, stat="identity",position="identity",...) 

을 시도했습니다 ggplot2이

숫자 클래스의 데이터를 처리하는 방법을 알고하지 않습니다

Block Start  End 
1 P1L  76.80  0.0 
2 P1S  68.87  4.4 
3 P2L  74.00  0.0 
4 P2S  74.28  3.9 
5 P3L  82.22  7.7 
6 P3S  80.82  17.9 

내 스크립트

ggplot(data=NULL,aes(x=Block))+ 
    geom_bar(data=my_data$Start,stat="identity",position ="identity",alpha=.3,fill='lightblue',color='lightblue4')+ 
    geom_bar(data=my_data$End,stat="identity",position ="identity",alpha=.8,fill='pink',color='red') 

내가 오류를 얻을 수있다 누구나 내가 그 일을 어떻게 할 수 있는지 알고 있니? 고맙습니다.

편집 :

피할 오버레이 바를 얻는 방법?

내 원래 게시물의 반대 문제이므로 내 다음 질문과 관련이 있기 때문에이 게시물을 편집합니다.

는 P.merkle

@ 나는 해안에 대한 모든 블록 표시 L 및 S. L 개의 스탠드의 평균 값을 보여주는 4 개 개의 막대로 내 플롯을 변경했고, Sublittoral에 대한 S. 그들은 두 가지 치료법으로 노출되었습니다 : 정상 및 감소.

평균과 표준 편차를 계산했습니다. 각각의 오차 막대가있는 막대가 네 개 필요합니다. 보통/문양, 축소/문양, 보통/하위 문, 축소/하위 문.

문제는 내가 음모를 꾸미면 양쪽 음양 막대와 두 개의 하위 음절 막대가 서로 겹쳐집니다. 그래서 지금 나는 가 아니라가 겹칠 것을 원합니다! 어떻게 할 수 있습니까?

ggplot(data=cdata,aes(x=newdata$Force,y=newdata$mean))+ 
     geom_bar(stat="identity",position ="dodge", 
       alpha=.4,fill='red', color='lightblue4',width = .6)+ 
     geom_errorbar(aes(ymin=newdata$mean-sd,ymax=newdata$mean+sd), 
         width=.2, position=position_dodge(.9)) 

결과가 있습니다 :

Zonation Force N mean sd se 1 Litoral Normal 6 0.000000 0.000000 0.000000 2 Litoral Redusert 6 5.873333 3.562868 1.454535 3 Sublitoral Normal 6 7.280000 2.898903 1.183472 4 Sublitoral Redusert 6 21.461667 4.153535 1.695674

내 스크립트가 이것이다 : 나는

newdata이 정보를 포함하는 내 ... 행운을하지 않고, position = 'dodge'position = position_dodge(newdata$Force) 모든 종류의 시도했습니다 불행히도 this

오차 막대의 시점에서, 거기에 4 개의 막대가 있지만 그것들은 겹칩니다. 제발, 어떻게 해결할 수 있습니까?

답변

1

질문에 대한 간단하고보다 복잡한 답변이 있습니다.

범례가 필요하지 않은 경우 간단한 해결책이 도움이 될 수 있습니다.

막대 그래프 옆에 범례를 표시하려면 데이터를 와이드 형식에서 긴 형식으로 변환해야하는보다 복잡한 솔루션을 사용하는 것이 좋습니다.

변형 1 :

ggplot(data=my_data,aes(x=Block))+ 
    geom_bar(aes(y=Start),stat="identity",position ="identity",alpha=.3,fill='lightblue',color='lightblue4') + 
    geom_bar(aes(y=End),stat="identity",position ="identity",alpha=.8,fill='pink',color='red') 

plot without legend

변형 : 전설 않고, 다양한 형식의 데이터를 유지

개별 기하 구조의 수준 (여기서, geom_bar)에 미학 사양을 구체화 할 수 있습니다 2 : 데이터를 긴 형식으로 변환하여 범례 추가

범례를 추가하려면 reshape2::melt을 사용하여 데이터 프레임을 넓은 형식에서 긴 형식으로 변환하면 variable ("Start"대 "End") 열과 value 열이 표시됩니다. 그런 다음 전설을 정의 할 variable 열을 사용

library(reshape2) 
my_data_long <- melt(my_data, id.vars = c("Block")) 
ggplot(data=my_data_long,aes(x=Block, y=value, fill=variable, color=variable, alpha=variable)) + 
    geom_bar(stat="identity",position ="identity") + 
    scale_colour_manual(values=c("lightblue4","red")) + 
    scale_fill_manual(values=c("lightblue","pink")) + 
    scale_alpha_manual(values=c(.3, .8)) 

enter image description here

+0

하하, 너무 쉽게! 정말 고맙습니다! – metazoa

+0

플롯 옆에 범례가 필요한 경우 편집 된 답변의 변형 2를 살펴보십시오. –

+0

오우, 고마워요! – metazoa

관련 문제