2017-11-20 3 views
1

ggplotのカラースケールグラジェントを適用する方法について質問があります。私は、応答変数が正と負の両方の数値を含む連続変数であり、独立変数が多数の独立したサイトであるデータセットを持っています。私は、すべてのデータをバックグラウンドでプロットし、データの負の範囲をカバーするレスポンスデータにカラースケール勾配を適用するような方法でデータをプロットしようとしています。これは、私が今までに私の実際のデータセットの構造を模倣したサンプルのデータセットを持っていることです。データの一部にggplotカラースケールグラデーションを適用する

tr_sim <- data.frame(site_id = seq(1,100,1), estimated_impact = 
    rnorm(100,18,200), impact_group = rep(c(1,2),each = 50)) 

    rng_full <- range(tr_sim$estimated_impact) 
    #produce plot showing the full range of impacts across all sites and then 
    over the subsetted sites 

    impact_plot_full <- ggplot(data = tr_sim, aes(x = factor(site_id, levels = 
    site_id[order(estimated_impact)]), y = estimated_impact)) + 
    geom_bar(stat = "identity",width = 1, fill = "grey80") 

    impact_plot_full 

    impact_plot_full + 
    geom_bar(stat = "identity", width = 1, position = "stack", aes(y = 
    estimated_impact[impact_group == 1])) + 
    scale_fill_gradient2(low="firebrick", mid="yellow", high = "green4") + 
    labs(y = "Estimated Impact ($/week)", x = "Total number of sites with estimate 
    is 100", title = "Sites with the greatest impact after coverage loss") + 
    theme(axis.text.x = element_blank()) + 
    scale_y_continuous(breaks = 
    round(seq(rng_full[1],rng_full[2],by=100),digits=0)) 

私は灰色で、バックグラウンドでのすべてのデータをプロットすることができ、私はこれの上に、応答データの負の範囲をプロットしようとしています。私は、「美学は長さ1か、データ(100)、y、xと同じでなければならない」というエラーを得る。負のデータはデータセット全体と同じ長さではないため、これが発生していることはわかっていますが、これを行う方法を理解できません。どんな提案も大歓迎です。

は、あなたがデータのサブセットと geom_barため aes()fillを使用する必要が カーティス

答えて

0

、ありがとうございます。

impact_plot_full + 
geom_bar(data = subset(tr_sim, estimated_impact < 0), 
     stat = "identity", 
     aes(y = estimated_impact, fill = estimated_impact)) + 
scale_fill_gradient2(low = "firebrick", mid = "yellow", high = 
"green4") + 
theme(axis.text.x = element_blank()) + 
xlab("site_id") 

enter image description here

ホープこれはあなたが探しているものです。

+0

ありがとうございます@ M.A。、素晴らしい作品です。私はあなたの答えを+1しようとしましたが、私の担当者のスコアは低すぎます – Curtis

関連する問題