2011-08-04 47 views
5

Estoy usando JFreeChart para crear gráficos de velas en mi aplicación Java. Sin embargo, mis cartas terminan con este aspecto:Auto-Scale Y-Axis en JfreeChart

capturebhx http://imageshack.us/photo/my-images/69/capturebhx.png/

me gustaría tener el eje Y escala automáticamente para que el gráfico se ve de la misma familia:

capture2wl http://imageshack.us/photo/my-images/717/capture2wl.png/

Creo que org.jfree.chart.axis.NumberAxis.configure() hará esto, pero no estoy seguro. Parece que no puedo encontrar la forma de vincular mi objeto JFreeChart o ChartPanel con este objeto NumberAxis. Por favor, ayúdenme, estoy perdido y he estado buscando durante mucho tiempo para tratar de unir estos objetos. O, si puedes encontrar otra forma, ¡también sería genial!

Algunos código:

... 
private DefaultHighLowDataset dataset; 
private JFreeChart chart; 
private ChartPanel chart_panel; 

... 

// creates dataset, then chart from dataset, then chart_panel from chart 
dataset = new DefaultHighLowDataset("", date, high, low, open, close, volume); 
chart = ChartFactory.createCandlestickChart("Blank", "Time", "Price", dataset, false); 
chart_panel = new ChartPanel(chart); // what you see in the images 
... 
+1

Algunos fragmentos de código podrían ayudar. –

Respuesta

6

Asegúrese de setAutoRangeIncludesZero(false) o "el rango del eje ... se ve obligado a incluir a cero".

Adición:

Todavía no sé cómo vincular un objeto NumberAxis a un objeto o ChartPanelJFreeChart objeto.

Es posible que desee examinar los ejemplos en org.jfree.chart.demo y here. Si esto es terra incognita, recomendaría The JFreeChart Developer Guide.

de responsabilidad: No afiliado con objeto Refinería Limited; solo un cliente satisfecho y un colaborador muy pequeño.

+0

Eso también podría hacerlo, pero todavía no sé cómo vincular un objeto NumberAxis a un objeto ChartPanel o un objeto JFreeChart. – supercoder

+0

He elaborado más arriba. Si sigues teniendo problemas, publica la [sscce] (http://sscce.org/) utilizada para crear tu [imagen] (http://imageshack.us/photo/my-images/69/capturebhx.png /). – trashgod

+0

yo también tengo el mismo problema, pero estoy usando una biblioteca de páginas para Android. y este código no funciona para mí – arjunkn

4

lo hice así:

 final JFreeChart chart = ChartFactory.createCandlestickChart(
      "Candlestick Demo", "Time", "Price", dataset, false); 

    double lowestLow = getLowestLow(dataset); 
    double highestHigh = getHighestHigh(dataset); 

    chart.getXYPlot().getRangeAxis().setRange(lowestLow*0.95, highestHigh*1.05); 

calculo el mínimo más bajo y el más bajo de alto uso de estas funciones

private double getLowestLow(DefaultHighLowDataset dataset){ 
    double lowest; 
    lowest = dataset.getLowValue(0,0); 
    for(int i=1;i<dataset.getItemCount(0);i++){ 
     if(dataset.getLowValue(0,i) < lowest){ 
      lowest = dataset.getLowValue(0,i); 
     } 
    } 

    return lowest; 
} 


private double getHighestHigh(DefaultHighLowDataset dataset){ 
    double highest; 
    highest = dataset.getHighValue(0,0); 
    for(int i=1;i<dataset.getItemCount(0);i++){ 
     if(dataset.getLowValue(0,i) > highest){ 
      highest = dataset.getHighValue(0,i); 
     } 
    } 

    return highest; 
} 

Esto me parece dar un muy buen gráfico de velas que hace buen uso del rango del eje Y Espero que esto ayude.