web-dev-qa-db-fra.com

Ligne horizontale / verticale dans un tracé

J'utilise le package plotly et j'essaie d'ajouter une ligne horizontale à un graphique. Existe-t-il un moyen de le faire en utilisant complotement?

Cela peut être fait en utilisant ggplot2 et la fonction ggplotly comme indiqué ci-dessous:

library(plotly)

p <- ggplot() +
  geom_hline(yintercept = 4) +
  xlim(c(0,10)) +
  ylim(c(0,10))

ggplotly(p)

Mais je ne peux pas ajouter cela à un complot complot existant.

De plus, l'axe de mes graphiques n'est pas fixe, il serait donc difficile (mais pas impossible) de simplement élaborer un système de coordonnées x et y pour une ligne horizontale, mais je préfère simplement en ajouter un automatiquement.

J'ai examiné les arguments y0 et dy, mais je n'arrive pas non plus à obtenir le code pour que ceux-ci fonctionnent. Je ne sais pas exactement ce qu'ils font exactement, mais je pense qu'ils sont peut-être ce que je cherche? Je ne trouve pas de bons exemples de leur utilisation.

18
Sam Helmich

Il existe plusieurs façons de le faire (en utilisant des données ou des coordonnées "papier"). En supposant que les coordonnées des données, la manière actuelle la plus simple est via add_segments():

plot_ly() %>%
  add_segments(x = 4, xend = 4, y = 0, yend = 10) %>%
  add_segments(x = 3, xend = 5, y = 5, yend = 5)

enter image description here

Remarquez comment nous avons codé en dur l'étendue de ces lignes en coordonnées de données; ainsi, lors du zoom et du panoramique du tracé, la ligne sera "coupée" à ces valeurs. Si vous ne voulez pas que ces lignes soient coupées, utilisez un forme de ligne avec xref/yref défini sur papier (cela met la région du graphique sur une échelle de 0-1, plutôt que sur x/y échelle de données):

vline <- function(x = 0, color = "red") {
  list(
    type = "line", 
    y0 = 0, 
    y1 = 1, 
    yref = "paper",
    x0 = x, 
    x1 = x, 
    line = list(color = color)
  )
}

hline <- function(y = 0, color = "blue") {
  list(
    type = "line", 
    x0 = 0, 
    x1 = 1, 
    xref = "paper",
    y0 = y, 
    y1 = y, 
    line = list(color = color)
  )
}

plot_ly() %>%
  layout(shapes = list(vline(4), hline(5)))

enter image description here

26
Carson

Alternativement, vous pouvez ajouter une forme (c'est-à-dire une ligne) sous layout (). L'exemple suivant ajoute une ligne verticale:

p <- plot_ly(data, x = ~x.data, y = ~y.data, text = ~text.data, type = 'scatter', 
       mode = 'markers', marker = list(size = ~size.data, opacity= 0.5)) %>%
     layout(shapes=list(type='line', x0= 0.2, x1= 0.2, y0=min(allyvalues), y1=max(allyvalues), line=list(dash='dot', width=1)),
       title = 'This is the Title',
       xaxis = list(title = "X-Axis", showgrid = TRUE),
       yaxis = list(title = "Y-Axis", showgrid = TRUE))
p
11
user3268362