2015-01-15 8 views
5

Ich möchte alle Tick-Markierungen und Hilfsstrichsbeschriftungen entlang der Achse in einem rCharts nPlot aus der nvd3-Bibliothek erzwingen. Ich habe mehrere Ansätze ohne Erfolg ausprobiert.rCharts nvd3 library force ticks

Dies ist das Standardverhalten:

df <- data.frame(x = 1:13, y = rnorm(13)) 
library(rCharts) 
n <- nPlot(data = df, y ~ x, type = 'lineChart') 
n$yAxis(showMaxMin = FALSE) 

enter image description here

Ich möchte alle Daten entlang der x-Achse in 1:13 Show haben.

Letztlich Ich habe benutzerdefiniert tickmarks I gleichen Abstand mit dem folgenden Ersatz zeigen will:

n$xAxis(tickFormat = "#! function (x) { 
    ticklabels = ['0-1000', '1000-1500', '1500-1700', '1700-1820', '1820-1913', 
     '1913-1950', '1950-1970', '1970-1990', '1990-2012', '2012-2030', 
     '2030-2050', '2050-2070', '2070-2100'] 
     return ticklabels[x-1]; 
} !#") 

enter image description here

Ich hoffe, es ist klar, warum ich alle Strichmarkierungen haben will und Etiketten gedruckt (und gleichmäßig verteilt).

Um eine Vorstellung von dem fertigen Produkt zu geben, hier ist ein ggplot2 Eindruck:

library(ggplot2) 
df <- data.frame(x = c('0-1000', '1000-1500', '1500-1700', '1700-1820', '1820-1913', 
    '1913-1950', '1950-1970', '1970-1990', '1990-2012', '2012-2030', '2030-2050', 
    '2050-2070', '2070-2100'), y = rnorm(13), z = "group1") 
ggplot(data = df, aes(x = x, y = y, group = z)) + geom_line() 

enter image description here

Hier sind einige Dinge, die ich versucht habe, auf der Grundlage mehrerer Vorschläge, die ich hier und da gefunden: weder Arbeit.

Aufgrund meiner Lektüre der Dokumente, dachte ich, das funktionieren würde:

diese
n$xAxis(tickFormat = "#! function (x) { 
    return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13][x-1]; 
} !#") 

Ich habe auch versucht, auf gut Glück:

n$xAxis(ticks = 13) 

Ich habe auch versucht tickValues und tickFormat zu kombinieren aber ohne Erfolg.

Ich dachte auch über ein Skript zu schreiben, aber auch hier mein Verständnis der nvd3 Bibliothek war unzureichend.

n$setTemplate(afterScript = 
    "<script> 
     var chart = nv.models.lineChart(); 
     var newAxisScale = d3.scale.linear(); 
      .range(d3.extent(chart.axes[0]._scale.range())) 
      .domain([1, d3.max(chart.axes[0]._scale.domain())]) 
     chart.axes[0].shapes.call(
      d3.svg.axis() 
      .orient('bottom') 
      .scale(newAxisScale) 
      .ticks(13) 
      //.tickValues() 
      //.tickFormat(d3.format()) 
     ).selectAll('text') 
      .attr('transform','') 
    </script>" 
) 

Keiner von diesen meldet Fehler in der Konsole, aber keiner von ihnen ändert das Aussehen des ersten Diagramms oben.

+0

Hier ist eine ähnliche Frage, aber es hat keine Antwort und die Kommentare dort nicht zu meinem Problem anwenden (sie entlang der x-Achse zu einem Zeitpunkt gelten, aber ich habe eine beliebige Zeichenfolge) . http://stackoverflow.com/questions/25120598/strings-as-tick-values-for-rcharts-nvd3-line-chart – PatrickT

+0

Und diese auch ähnliche Frage, die ich gerade bemerke, schlägt jetzt vor, dass es keine Hoffnung gibt ... http : //stackoverflow.com/questions/25481853/rcharts-nvd3-linechart-with-categorical-x-axis – PatrickT

Antwort

3

Es stellt sich heraus, dass ich tickValues nicht richtig eingestellt habe, da ich die Syntax mit tickFormat verwechselt habe. Hier ist eine rCharts Lösung. Die entsprechende d3 oder nvd3 Lösung sollte einfach zu schließen.

n <- nPlot(data = df, y ~ x, type = 'lineChart') 
n$yAxis(showMaxMin = FALSE) 
n$addParams(height = 500, width = 1000) 
n$xAxis(tickValues = "#! function (x) {  
    tickvalues = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]; 
    return tickvalues; 
} !#") 
n$xAxis(tickFormat = "#! function (x) { 
    tickformat = ['0-1000', '1000-1500', '1500-1700', '1700-1820', '1820-1913', 
     '1913-1950', '1950-1970', '1970-1990', '1990-2012', '2012-2030', '2030-2050', 
     '2050-2070', '2070-2100']; 
    return tickformat[x-1]; 
} !#") 
n 

Beachten Sie, wie der Code tickvalues in tickValues aber tickformat[x-1] in tickFormat hat.

enter image description here