2016-06-24 22 views
2

this questionをフォローすると、輪郭プロットの凡例の色をどのように修正しますか?ここで塗りつぶしグラデーションを使用してプロットの凡例の色を変更する方法はありますか?

はプロットを生成する方法である:ここでは

x <- rep(seq(0.01, 0.1, length.out = 50), 50) 
y <- rep(seq(0.01, 0.1, length.out = 50), each = 50) 
z <- 1/(x^2 + y^2) 

my.data <- data.frame(x, y, z) 

ggplot(my.data, aes(x = x, y = y, fill = z)) + 
    geom_tile() + 
    scale_fill_gradientn(colours = c("blue", 
            "cyan", 
            "green", 
            "yellow", 
            "orange", 
            "red"), 
         values = rescale(c(0.3, 1, 2, 5, 10, 20, 35))) + 
    scale_x_continuous(expand = c(0, 0)) + 
    scale_y_continuous(expand = c(0, 0)) 

は結果である:

私は手動で色を設定することができるようにしたい

Ugly legend

(私はそれを行う方法を知っています休憩のために)それはより読みやすいように。上記の例では、最も興味があるかもしれない低い値についてはあまり言及することができません。凡例には青色が表示されません。

答えて

0

あなたのvalues=...がうんざりしているようです。ドキュメントを読んで、values関数を試してみると、範囲を指定することのように見えますが、それぞれの色の重みは小さくなります。あなたの問題は、色がまだ伝説にあるということですが、あなたのvalues呼び出しのためにあまりにも「重み付け」されているため、表示されません(つまり、そこにはありますが彼らは伝説の小さなスライバーです)。

values=...の極値を試してみると、これを試すことができます。私は、この例では100を使用します。

ggplot(my.data) + 
    geom_tile(aes(x = x, y = y, fill = z)) + 
    scale_fill_gradientn(colours = c("blue", 
            "cyan", 
            "green", 
            "yellow", 
            "orange", 
            "red"), 
         values = rescale(c(0.3, 1, 2, 5, 10, 20, 100))) + 
    scale_x_continuous(expand = c(0, 0)) + 
    scale_y_continuous(expand = c(0, 0)) 

enter image description here

あなたは基本的に全体の凡例は赤によって引き継がれ、さらに、より多くの赤のプロットであることがわかります。

あなたの問題を修正するには、次のようvalues=...せずに何かを試みることができる:

ggplot(my.data) + 
    geom_tile(aes(x = x, y = y, fill = z)) + 
    scale_fill_gradientn(colours = c("blue", 
            "cyan", 
            "green", 
            "yellow", 
            "orange", 
            "red"))+ 
    scale_x_continuous(expand = c(0, 0)) + 
    scale_y_continuous(expand = c(0, 0)) 

enter image description here

次に、あなたが伝説はそれで青を持っていますが、中にはるかに青いあり見ることができますあなたのプロット。これはあなたのデータの成果物です。 quantile(my.data$z,c(seq(0,1,by=0.05)))を試してみると、95パーセンタイルが〜800で、最大値が5000であることがわかります。凡例でわかるように、1000未満の値は青で塗りつぶされています(データの95%です)。

青が少なくなるようにしたい場合は、valuesをもう一度使いこなすことができます(データは正確に表現したいと思うかもしれません)。また

ggplot(my.data) + 
    geom_tile(aes(x = x, y = y, fill = z)) + 
    scale_fill_gradientn(colours = c("blue", 
            "cyan", 
            "green", 
            "yellow", 
            "orange", 
            "red"), 
         values =rescale(c(0.3, 3, 4, 5, 10, 20, 35))) + 
    scale_x_continuous(expand = c(0, 0)) + 
    scale_y_continuous(expand = c(0, 0)) 

enter image description here

、どの私はあなたのプロットはのように歪んではありませんので、あなたの外れ値を取り除くことができ、より良い解決策だと思う。このような何か。現在、values操作のないggplot関数は、データを正確に表現しています。

+0

これは私の質問に対する答えではありません。私は自分のデータが対数スケールのために泣いているのを知っています。私はそれを "手で"やろうとしています。 なぜ、 'trans =" log'を使わないのですか?それはここで説明します:http:// stackoverflow。com/questions/37974317/how-to-plot-contour-with-a-log-in-a-interactive-graph-in-r/38009505#38009505 最後に、 _legend color_手作業では、私はグラフの色とデータで十分です。 – Ben

+0

あなたはこのを探しています:scale_fill_gradientn(色= cで( "青"、 "シアン"、)、 "緑" "黄"、 "オレンジ"、 "赤"、 休憩の=のC(1、 10,100,500,1000,2500,5000)、trans = "log") – MLavoie

+0

Nope。私はログスケールを望んでいないし、ブレーク値を変更する方法を知っている。私が欲しいのは、凡例の色を手動で変更することです。 – Ben

関連する問題