2017-09-08 3 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:2番目のデータフレームからスタックされた棒グラフのトラブルシューティング

私の目標は、このプロットに、plot_labels$labelというラベルを貼り付け、同じy軸上に積み重ねたバーと同じ尺度でラベルを付けることです。

プロット定義でgeom_textで始まる行をコメントアウトすると、次のエラーがスローされます。

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

plot_labels$label値はplot_data$yearplot_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,xおよびyは、ggplotと同じタイプである必要があります。

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

甘い、答えと提案のおかげで!本当にしばらくの間、この計画に立ち往生してしまった。 –

関連する問題