2

私はこのデータフレームを持っています:

頭(x)

      Date Company   Region Units
1 1/1/2012 Gateway  America     0
2 1/1/2012 Gateway   Europe     0
3 1/1/2012 Gateway  America     0
4 1/1/2012 Gateway Americas     0
5 1/1/2012 Gateway   Europe     0
6 1/1/2012 Gateway  Pacific     0

x dput(x)

    structure(list(Date = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("1/1/2012", 
"1/12/2012", "1/2/2012"), class = "factor"), Company = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L), .Label = c("Gateway", "HP", "IBM"), class = "factor"), 
    Region = structure(c(1L, 3L, 1L, 2L, 3L, 4L, 2L, 1L, 3L, 
    1L, 2L, 3L, 4L, 2L, 1L, 3L, 1L, 2L, 3L, 4L, 2L, 1L, 3L, 1L, 
    2L, 3L, 4L, 2L, 1L, 3L, 1L, 2L, 3L, 4L, 2L, 1L, 3L, 1L, 2L, 
    3L, 4L, 2L, 1L, 3L, 1L, 2L, 3L, 4L, 2L, 1L, 3L, 1L, 2L, 3L, 
    4L, 2L, 1L, 3L, 1L, 2L, 3L, 4L, 2L, 1L, 3L, 1L, 2L, 3L, 4L, 
    2L, 1L, 3L, 1L, 2L, 3L, 4L, 2L, 1L, 3L, 1L, 2L, 3L, 4L, 2L
    ), .Label = c("America", "Americas", "Europe", "Pacific"), class = "factor"), 
    Units = c(1L, 3L, 1L, 6L, 20L, 2L, 2L, 10L, 2L, 1L, 2L, 4L, 
    6L, 30L, 2L, 15L, 10L, 3L, 4L, 7L, 9L, 12L, 34L, 50L, 3L, 
    2L, 4L, 3L, 1L, 3L, 3L, 1L, 4L, 0L, 1L, 0L, 0L, 1L, 0L, 4L, 
    0L, 0L, 0L, 0L, 5L, 0L, 8L, 0L, 0L, 0L, 0L, 0L, 9L, 0L, 56L, 
    10L, 0L, 0L, 5L, 7L, 0L, 0L, 8L, 0L, 2L, 0L, 4L, 0L, 5L, 
    7L, 0L, 0L, 8L, 10L, 0L, 6L, 0L, 4L, 4L, 0L, 2L, 0L, 5L, 
    0L)), .Names = c("Date", "Company", "Region", "Units"), class = "data.frame", row.names = c(NA, 
-84L))

ヒートマップを作成したい:

ggplot(x, aes(Date, Company, fill=Units)) + geom_tile(aes(fill=Units)) + facet_grid(~Region) + scale_fill_gradient(low="white", high="red")

このコマンドは機能しますが、白と赤ではなく異なる色を使用して、凡例の鱗を増やすことができる必要があります。現在、デフォルトは5つの凡例があります。私はそれを10に増やしたいと思います。ユーザーが気付くように、Oは白で、他のものは白とは明らかに異なる必要があります。

ggplotを使用して凡例の値の数を増やし、各凡例に異なる色を割り当てるにはどうすればよいですか?

4

1 に答える 1

3

このブログでここで行われているquantilesように、プロットに使用することは非常に有益だと思います。これは、(ブログに示されているように)歪んだカラーセットを生成するのに役立ちます。データがあなたのデータに似ている(非常に大量の0)と仮定すると、適切な分位数を計算することで、適切なラベルが付いた、視覚的に優れた有益な歪んだカラーマップを作成できます。この問題にすでにリンクされているブログプロットのコードを変更し、もう少し説明を追加しました。ブログ投稿は、アイデアと実装のすべての功績を認める必要があります。heatmaps

コードに入る前にquantiles、データを分析して、使用する分位数を確認する必要があります。行うことによって:

quantile(x$Units, seq(0, 1, length.out = 25)

#      0% 4.166667% 8.333333%     12.5% 16.66667% 20.83333%       25% 29.16667% 33.33333% 
# 0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000 
#   37.5% 41.66667% 45.83333%       50% 54.16667% 58.33333%     62.5% 66.66667% 70.83333% 
# 1.00000   1.00000   2.00000   2.00000   3.00000   3.00000   4.00000   4.00000   5.00000 
#     75% 79.16667% 83.33333%     87.5% 91.66667% 95.83333%      100% 
# 6.00000   7.00000   8.00000   9.62500  10.16667  25.41667  56.00000 

0%分位数がデータに対応していることがわかりますUnits=0。そしてそれは33%33.33%正確には)までそれ自体です。したがって、38%次の分位数として選択する可能性があります。次に、、、と言い、60%最後に。で終了します。これで、必要なレベルが十分にあり、データにとって意味のあるレベルになっています。75%90%100%

zooこれを実現するにはパッケージが必要です。今すぐデータを作成しましょう:

require(zoo) # for rollapply
# the quantiles we just decided to categorise the data into classes.
qtiles    <- quantile(x$Units, probs = c(0, 38, 60, 75, 90, 100)/100)
# a color palette
c_pal     <- colorRampPalette(c("#3794bf", "#FFFFFF", 
                         "#df8640"))(length(qtiles)-1)
# since we are using quantile classes for fill levels, 
# we'll have to generate the appropriate labels
labels    <- rollapply(round(qtiles, 2), width = 2, by = 1, 
                      FUN = function(i) paste(i, collapse = " : "))
# added the quantile interval in which the data falls, 
# which will be used for fill
x$q.units <- findInterval(x$Units, qtiles, all.inside = TRUE)

# Now plot
library(ggplot2)
p <- ggplot(data = x, aes(x = Date, y = Company, fill = factor(q.units)))
p <- p + geom_tile(color = "black")
p <- p + scale_fill_manual(values = c_pal, name = "", labels = labels)
p <- p + facet_grid( ~ Region)
p <- p + theme(axis.text.x = element_text(angle = 90, hjust = 1))
p

あなたはこれを手に入れます: ggplot2_heatmap_skewed

お役に立てれば。

編集:colorbrewer2.orgにアクセスして、素敵なパレットを入手し、自分で色を設定することもできます。例えば:

# try out these colors:
c_pal     <- c("#EDF8FB", "#B3CDE3", "#8C96C6", "#8856A7", "#810F7C")
c_pal     <- c("#FFFFB2", "#FECC5C", "#FD8D3C", "#F03B20", "#BD0026")

また、alphaコードで設定してみてくださいgeom_tile(color = "black", alpha = 0.5")

于 2013-02-11T16:28:44.587 に答える