2017-01-06 28 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', которая заменит существующий масштаб.

Любые решения?

Заранее благодарен!

+0

, какая строка кода добавляет еще одну легенду? –

+0

У меня этот код отсюда: http://stackoverflow.com/questions/13887365/ggplot2-circular-heatmap-that-looks-like-a-donut Первоначально я думал, что это scale_y_discrete (брейки = y_breaks, label = y_labels) будет другой легендой (левый угол, в сером цвете), но это не сработает. – Miyii

+0

Это не ошибка, ее предупреждение (удалить '' scale_y_discrete (breaks = y_breaks , labels = y_labels) + '', чтобы избавиться от ненужного. Кроме того, следует отметить, что вам нужно загрузить 'plyr' для' ddply'. В любом случае, ваше объяснение «легенда, которая говорит мне, какое кольцо круговой карты тепла представляет», не имеет для меня никакого смысла. Возможно, это мое невежество, у вас есть пример того, что вы ищете? Кольца пронумерованы? Если это так требует дополнительного кода и другого вопроса, чем того, что вы просили. –

ответ

0

Мне не совсем понятно, что вы ищете, но это может быть так. Вы изначально использовали scale_y_discrete(breaks=y_breaks, labels=y_labels) для проектирования непрерывной переменной, var2, в aes(x=Name, y=var2, fill=value). Изменив это значение на scale_y_continuous(breaks=y_breaks, labels=y_labels), вы можете получить категориальные этикетки, перечисленные для nba.m$variable.

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

Я не уверен, что вы пытаетесь сделать здесь -those значения не пусты в центре, потому что есть данные там, удаление 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 $ variable',« пончик »(размер отверстия в середине сюжета), казалось, исчез! Это разрешено, если «scale_y_continuous (breaks = y_breaks, labels = y_labels)» закомментировано (что затем предотвращает появление ярлыков ...) – Miyii

+0

@Miyii, мне жаль, что его неясно, какая проблема или как приведенный выше график не соответствует вашим потребностям ... –

+0

что-то вроде сюжета на этом сайте [ссылка] (http://www.r-graph-gallery.com/128-ring-or-donut-plot/) , в результате чего есть отверстие в середине участка. Я сказал, что отверстие в размере 15 в скрипте, но оно не появляется. – Miyii