2017-01-06 16 views
-1

円形のヒートマップのどのリングが(外側のリングから内側のリングに)表示されるかを示す別の凡例を追加したいと思います。 円形ヒートマップに別の凡例を追加するにはR

は、私が以前に別の answerから、次の試してみました。しかし

library(reshape) 
library(ggplot2) 
library(plyr) 

nba <- read.csv("http://datasets.flowingdata.com/ppg2008.csv") 

nba$Name <- with(nba, reorder(Name, PTS)) 
nba.m <- melt(nba) 

nba.m <- ddply(nba.m, .(variable), transform, value = scale(value)) 

# Convert the factor levels (variables) to numeric + quanity to determine size of hole. 
nba.m$var2 = as.numeric(nba.m$variable) + 15 

# Labels and breaks need to be added with scale_y_discrete. 
y_labels = levels(nba.m$variable) 
y_breaks = seq_along(y_labels) + 15 


nba.labs <- subset(nba.m, variable==levels(nba.m$variable) [nlevels(nba.m$variable)]) 

nba.labs <- nba.labs[order(nba.labs$Name),] 
nba.labs$ang <- seq(from=(360/nrow(nba.labs))/1.5, to=(1.5* (360/nrow(nba.labs)))-360, length.out=nrow(nba.labs))+80 
nba.labs$hjust <- 0 
nba.labs$hjust[which(nba.labs$ang < -90)] <- 1 
nba.labs$ang[which(nba.labs$ang < -90)] <- (180+nba.labs$ang)[which(nba.labs$ang < -90)] 

p2 = ggplot(nba.m, aes(x=Name, y=var2, fill=value)) + 
    geom_tile(colour="white") + 
    geom_text(data=nba.labs, aes(x=Name, y=var2+1.5, 
          label=Name, angle=ang, hjust=hjust), size=3) + 
    scale_fill_gradient(low = "white", high = "steelblue") + 
    ylim(c(0, max(nba.m$var2) + 1.5)) + 
    scale_y_discrete(breaks=y_breaks, labels=y_labels) + 
    coord_polar(theta="x") + 
    theme(panel.background=element_blank(), 
    axis.title=element_blank(), 
    panel.grid=element_blank(), 
    axis.text.x=element_blank(), 
    axis.ticks=element_blank(), 
    axis.text.y=element_text(size=5)) 
print(p2) 

、代わりの伝説を取得し、私が代わりにこのエラーメッセージ抱えている:「Y」の

スケールをすでにありますプレゼント。 'y'に別の縮尺を追加すると、 は既存の縮尺を置き換えます。

任意のソリューションですか?

ありがとうございます!

+0

? –

+0

私はここから、このコードがあります:最初http://stackoverflow.com/questions/13887365/ggplot2-circular-heatmap-that-looks-like-a-donut を、私は、この scale_y_discrete(休憩の=のy_breaksを考えましたラベル= y_labels) は、他の凡例(灰色の左手隅)になりますが、動作しません。 – Miyii

+0

これはエラーではないようです。その警告は表示されません(scale_y_discrete(breaks = y_breaks 、labels = y_labels)+ ''不要にする)。また、 'ddply'に' plyr'をロードする必要があることに注意してください。とにかく、あなたの解説は、 "循環的なヒートマップのリングが何を表しているかを伝える伝説"は、私にとって意味をなさない。おそらくそれは私自身の無知なことです。あなたが探しているものの例がありますか?リングは番号が付けられていますか?もしそうなら、追加のコードと、あなたが尋ねたものとは異なる質問が必要です。 –

答えて

0

あなたが探しているものは完全にはっきりしませんが、これはそうかもしれません。 元々scale_y_discrete(breaks=y_breaks, labels=y_labels)を使用して、連続変数、var2aes(x=Name, y=var2, fill=value)に投影していました。これをscale_y_continuous(breaks=y_breaks, labels=y_labels)に変更すると、nba.m$variableのカテゴリラベルが表示されます。データがありますので、私はあなたがここに-those値をやろうとしているかわからないんだけど

ggplot(nba.m, aes(x=Name, y=var2, fill=value)) + 
    geom_tile(colour="white") + 
    geom_text(data=nba.labs, aes(x=Name, y=var2+1.5, 
          label=Name, angle=ang, hjust=hjust), size=3) + 
    scale_fill_gradient(low = "white", high = "steelblue") + 
    ylim(c(0, max(nba.m$var2) + 1.5)) + 
    scale_y_continuous(breaks=y_breaks, labels=y_labels) + 
    coord_polar(theta="x") + 
    theme(panel.background=element_blank(), 
    axis.title=element_blank(), 
    panel.grid=element_blank(), 
    axis.text.x=element_blank(), 
    axis.ticks=element_blank(), 
    axis.text.y=element_text(size=5)) 

enter image description here

UPDATE

scale_y_continuous(breaks=y_breaks, labels=y_labels)が制限取り外し、中央に空白ではありません日付がもはやグラフ化されないようなy軸のスケール。だからこそ、そのコード行が削除されたときに真ん中が表示されないのです。いずれにせよ、探しているのであれば、scale_y_continuous(breaks=y_breaks, labels=y_labels)を削除し、y軸のラベルをオフにしてから、grobを使って手動でラベルを追加してください。私はあなたが必要とするものを達成するためのより良い方法があると確信していますが、これはあなたが少なくとも始動させるでしょう。あなたのコードの行が別の凡例を追加し

p<-ggplot(nba.m, aes(x=Name, y=var2, fill=value)) + 
    geom_tile(colour="white") + 
    geom_text(data=nba.labs, aes(x=Name, y=var2+1.5, 
          label=Name, angle=ang, hjust=hjust), size=2.5) + 
    scale_fill_gradient(low = "white", high = "steelblue") + 
    ylim(c(0, 50)) + 
    coord_polar(theta="x") + 
    theme(panel.background=element_blank(), 
    axis.title=element_blank(), 
    panel.grid=element_blank(), 
    axis.text.x=element_blank(), 
    axis.ticks=element_blank(), 
    axis.text.y=element_text(size=5))+ theme(axis.title.y=element_blank(), 
     axis.text.y=element_blank(), 
     axis.ticks.y=element_blank()) 
lab = textGrob((paste("G MIN PTS FGM FGA FGP FTM FTA FTP X3PM X3PA X3PP ORB DRB TRB AST STL BLK TO PF")), 
    x = unit(.1, "npc"), just = c("left"), 
    gp = gpar(fontsize = 7)) 

gp = ggplotGrob(p) 
gp = gtable_add_rows(gp, unit(10, "grobheight", lab), -1) 
gp = gtable_add_grob(gp, lab, t = -2, l = gp$layout[gp$layout$name == "panel",]$l) 

grid.newpage() 
grid.draw(gp) 

enter image description here

+0

はい!私たちはほとんどそこにいると思う! 「ドーナッツ」(プロットの真ん中にある穴の大きさ)が消えてしまったように見えるのは、今ではnba.m変数のラベルが現れていることです。これは、 'scale_y_continuous(breaks = y_breaks、labels = y_labels) 'がコメントアウトされている場合に解決されます(ラベルが表示されなくなります...) – Miyii

+0

@Miyii、問題が何であるか、上記のプロットはあなたのニーズに合っていません... –

+0

このウェブサイトのプロットのようなものです[link](http://www.r-graph-gallery.com/128-ring-or-donut-plot/) 、プロットの中央に穴があります。私は、スクリプトでは穴の大きさを15と指定しましたが、現れません。 – Miyii

関連する問題