2017-09-08 5 views
0
plot_data <- rbind(
         data.frame(year = seq(2018,2027), value = seq(1000,10000,1000), type = 'Type A'), 
         data.frame(year = seq(2018,2027), value = seq(500,5000,500), type = 'Type B') 
        ) 
plot_labels  <- data.frame(year = seq(2018,2027), label = seq(1500,15000,1500)) 

ggplot(plot_data, aes(x=as.character(year), y=value, fill=type)) + 
geom_bar(width = .6, stat='identity') + 
# geom_text(data = plot_labels, aes(x = year, y = text, label = label)) + 
scale_x_discrete(name = '') + 
scale_y_continuous(name = 'My Label\n') + 
scale_fill_manual(name = '', values = c('red', 'blue')) + 
theme(
    plot.title = element_text(size = 10, hjust = .5), 
    panel.grid.major = element_line(colour = 'white', size = 1), 
    panel.grid.minor = element_line(colour = 'white'), 
    plot.background = element_rect(fill = 'white'), 
    panel.background = element_rect(fill = 'white'), 
    axis.text.x = element_text(colour = 'grey20', size = 7, angle = 45, hjust = 1), 
    axis.title.y = element_text(color = 'grey20', size = 9), 
    axis.text.y = element_text(colour = 'grey20', size = 7), 
    legend.position='bottom', 
    legend.key.size=unit(5,'mm'), 
    legend.text = element_text(size = 7)) 

이 코드는 스택 막 대형 차트를 생성합니다.R 및 ggplot : 두 번째 데이터 프레임의 스택 막대 차트 오류 표기

저의 목표는 누적 막대와 동일한 y 축 및 비율로이 플롯에 plot_labels$label이라는 라벨을 지정하는 것입니다.

플롯 정의 geom_text로 시작하는 라인을 주석 처리하면 다음과 같은 오류가 발생 :

Error in eval(expr, envir, enclos) : object 'type' not found

plot_labels$labelplot_data$year 의해 plot_data$value 요약 동등하다.

문제 해결에 많은 도움을 주실까요?

+1

당신은 그렇지 않으면 ggplot '에 정의 된 미적 매핑()'에서 = type'을 채우기'상속, 볼을 시도,') (은'geom_text에 라인을'inherit.aes = FALSE'를 추가해야 'plot_labels'에서 "type"이라는 이름의 열에 대해. –

+0

또한, 나는'geom_text()'에 대한 미적 매핑에서'y = text'보다는'y = label'이어야한다고 생각하십니까? –

+0

'y = text'는 오타 였고 여러분이 잘 잡았습니다. 'inherit.aes = FALSE'를 추가했습니다! 무슨 팽창 남자, 고마워! –

답변

1

몇 가지 문제 : 1) fillgeom_bar에 있어야합니다. 그렇지 않으면 뒤 따르는 모든 기하 구조에 의해 상속됩니다. 2) xy을 모두 입력하면 geom_colgeom_bar보다 좋습니다. 3) geom_text, xyggplot과 동일한 유형이어야합니다.

ggplot(plot_data, aes(x=as.character(year), y=value)) + 
    geom_col(aes(fill=type), width = .6) + 
    geom_text(data = plot_labels, aes(x = as.character(year), y = label, label = label), vjust = 0) + 
    scale_x_discrete(name = '') + 
    scale_y_continuous(name = 'My Label\n') + 
    scale_fill_manual(name = '', values = c('red', 'blue')) + 
    theme(
     plot.title = element_text(size = 10, hjust = .5), 
     panel.grid.major = element_line(colour = 'white', size = 1), 
     panel.grid.minor = element_line(colour = 'white'), 
     plot.background = element_rect(fill = 'white'), 
     panel.background = element_rect(fill = 'white'), 
     axis.text.x = element_text(colour = 'grey20', size = 7, angle = 45, hjust = 1), 
     axis.title.y = element_text(color = 'grey20', size = 9), 
     axis.text.y = element_text(colour = 'grey20', size = 7), 
     legend.position='bottom', 
     legend.key.size=unit(5,'mm'), 
     legend.text = element_text(size = 7)) 
+0

달콤한, 답변 및 제안 주셔서 감사합니다! 정말이 음모에 잠시 붙어 있습니다. –