2017-09-05 3 views
0

Ich bin relativ neu in R. Ich mache eine R Shiny App, und basierend auf der Eingabe des Benutzers möchte ich die Daten analysieren und einen Balken ausgeben, der den Jaccard-Index anzeigt. Das ist, was ich es aussehen soll, obwohl offensichtlich eine glatte Steigung:Erstellen eines reaktiven rechteckigen Plots

enter image description here

Bitte beachten Sie, dass der Jaccard Index (in diesem Fall 0,35) nach jeder Eingabe ändern, so würde ich etwas mag reaktiv. Ich habe nur keine Ahnung, wo ich anfangen soll, oder wenn ich solche Plots sogar in R machen kann.

Danke.

edit: Ich habe stattdessen einen Online-Gradientengenerator verwendet, um dieses Diagramm zu erstellen: Wie könnte ich eine vertikale Linie mit dem entsprechenden Jaccard-Index und der entsprechenden Position auf der Leiste dieses bestimmten Bildes überlagern?

enter image description here

edit: Ich mag den weißen Raum vor der eigentlichen Handlung und nach meinem Text entfernen. irgendwelche Ideen? enter image description here

Antwort

1

Mit dem plotrix Paket:

library(plotrix) 
# get an empty box 
plot(0:10, type="n", axes=FALSE, xlab=NA, ylab=NA) 
# rectangle filled with a gradient 
gradient.rect(0, 0, 10, 5, col=smoothColors("red",38,"blue"), border=NA) 
# vertical bar 
segments(3.5, 0, 3.5, 5, lwd=2) 
text(3.5, 0, "0.35", pos=1, xpd=TRUE) 

enter image description here

+0

wie verwende ich diese in R Shiny? Wie kann ich einfach ein Objekt, aka diese Handlung, in einer "reaktiven" Funktion "zurückgeben"? in Ihrem Code, jede Zeile baut aufeinander auf, so dass ich nicht weiß, was zu tun ist ... – sweetmusicality

+1

@sweetmusicality in 'renderPlot', müssen Sie nicht" ein Objekt " –

+0

müssen Sie nicht nur zurückgeben ein Objekt zurückgeben? – sweetmusicality

1

Für etwas in der Basis R, eine unvollkommen modifizierte Version von this solution, funktionieren könnte.

color.bar <- function(lut, min, max=-min, nticks=11, ticks=seq(min, max, len=nticks), title='') { 
    scale = (length(lut)-1)/(max-min) 
    dev.new(width=1.75, height=5) 
    plot(c(min,max), c(0,10), type='n', bty='n', xaxt='n', xlab='', yaxt='n', ylab='', main=title) 
    for (i in 1:(length(lut)-3)) { 
    x = (i-1)/scale + min 
    rect(x, 0 ,1, 30/scale, col=lut[i], border=NA) 
    } 
} 

Dann die Grafik machen wie folgt -

color.bar(colorRampPalette(c("light green", "yellow", "orange", "red"))(100), 0, 1) 

An dieser Stelle können Sie vielleicht hinzufügen, ein abline(v = 0.35) zu bekommen, was Sie wollen? Sie könnten sogar versuchen, in die entsprechende Position zeigt einen Pfeil mit mit

arrows(0.35, -1, 0.35, 0, length = 0.07, angle = 25) 

enter image description here

+0

wo gebe ich an, dass es "0.35" des Weges in? Bc ist, jetzt ist Ihre "0.35" fast "0.66" und ich habe andere Werte in Ihrem Code in Ihrem versucht Pfeile Funktion, und konnte nicht herausfinden, wo es zu ändern – sweetmusicality

+1

Dies sollte besser funktionieren – Ameya

+0

danke :) eine letzte Frage - wie füge ich den Wert darunter oder zumindest in der Nähe des Pfeils? – sweetmusicality

Verwandte Themen