Цвет R сюжетных текстовых аннотаций по градиенту - PullRequest
0 голосов
/ 06 мая 2018

Я пытаюсь сделать scatter plot с R plotly, где точки окрашены в соответствии с градиентом, и в дополнение к этому я хотел бы написать аннотацию в несколько точек, где я бы как цвет аннотации текста, чтобы следовать за тем же градиентом цвета.

Вот данные игрушки:

set.seed(1)
df <- data.frame(x=rnorm(100),y=-1*log10(runif(100,0,1)),id=paste0("id",1:100),stringsAsFactors = F)

Вот график цветного рассеяния:

library(plotly)
library(dplyr)

scatter.plot <- plot_ly(type='scatter',mode='markers',x=~df$x,y=~df$y,color=~df$y,colors=c("blue","red"),showlegend=FALSE) %>%
  layout(xaxis=list(title="Effect Size",zeroline=F),yaxis=list(title="Significance",zeroline=F))

, который дает: enter image description here

Затем я пытаюсь добавить текстовую аннотацию.

Сначала я создаю данные аннотации:

ann.df <- df[sample(100,5,replace = F),]

Затем я пытаюсь добавить текст аннотации:

scatter.plot <- scatter.plot %>% layout(annotations = list(x=ann.df$x,y=ann.df$y,text=ann.df$id,xref="x",yref="y",showarrow=T,arrowhead=5,arrowcolor=ann.df$y,ax=20,ay=-40,colors=c("blue","red"),font=list(size=15,color=ann.df$y,colors=c("blue","red"))))

Текст добавлен, но не имеет цветовой кодировки: enter image description here

Есть идеи, как получить цвет текста в соответствии с df$y с градиентом c("blue","red")?

1 Ответ

0 голосов
/ 07 мая 2018

Я не уверен, как этого добиться, используя plotly. Может быть, у кого-то будет идея получше, но в то же время может быть проще, просто используя ggplotly, чтобы получить то, что вы хотите.

Вы можете попробовать это:

a <- ggplot(data = df, aes(x = x, y = y, color = y, label1 = x, label2 = y)) + 
  geom_point() + 
  theme_bw() + 
  scale_color_continuous(low = "blue", high = "red")

b <- a +  
  geom_text(data = ann.df, aes(x=x, y=y, label = id, color = y), hjust = 0, nudge_x = 0.05)

ggplotly(b, tooltip = c("label", "label1", "label2"))

enter image description here

...