2010-09-13 51 views
8

Tengo un problema con un gráfico superpuesto JFreeChart. Estoy usando JFreeChart 1.0.13. Lo que trato de hacer parece que fue más fácil de hacer en versiones anteriores de JFreeChart?Ayuda con superposición JFreeChart

El gráfico muestra un gráfico de líneas y un gráfico de barras. El rango de datos trazado por el gráfico de líneas para el eje Y está en el rango 0-100, y el eje para el gráfico de barras está en el rango 0-5.

Individualmente, cuando dibujo cada cuadro y lo pinto, se ven geniales. He aquí un ejemplo:

Bar Chart alt text Línea alt text

Pero cuando les superposición, el gráfico de barras se redujo a mirar increíblemente inútil ... presumiblemente debido a las escalas de los dos conjuntos de datos son tan diferentes.

Ejemplo: alt text

Lo que realmente quiero es dividir los datos de la serie de los dos conjuntos de datos, y mostrar el rango de 0-100 para el gráfico de líneas en el eje Y la mano izquierda y tener el gráfico de barras se muestran a tamaño completo como en mi primer ejemplo a continuación, pero tienen la escala 0-5 mostrada en el lado derecho del eje Y del gráfico.

Para crear el gráfico, estoy creando primero el gráfico de barras usando un XYSeriesCollection, la adición de los datos y la creación de la trama ...

XYSeriesCollection histogramDataset= new XYSeriesCollection(); 
XYSeries xy= new XYSeries("Temp"); 
xy.add(100,0.0); 
xy.add(101,0.3769791404875597); 
histogramDataset.addSeries(xy); 
... 
final NumberAxis xAxis = new NumberAxis("Temperature C"); 
xAxis.setAutoRangeIncludesZero(false); 
final ValueAxis yAxis = new NumberAxis("Percent Time above Temperature"); 
final XYItemRenderer renderer = new XYBarRenderer(); 

final XYPlot plot = new XYPlot((XYDataset) histogramDataset, xAxis, yAxis, renderer); 

Luego de crear el gráfico de líneas de una manera similar y añadir la segunda serie de la trama ...

final XYSeries xy = new XYSeries("First"); 
final XYDataset xySeriesData = new XYSeriesCollection(); 
final XYItemRenderer xyLineRenderer = new XYLineAndShapeRenderer(); 
xyLineRenderer.setSeriesShape(0, new Line2D.Double(0.0, 0.0, 0.0, 0.0)); 
xyLineRenderer.setSeriesStroke(0, new BasicStroke(4.5f)); 
xy.add(100,100.0); 
xy.add(101,100.0); 
xyseriesData.add(xy); 
plot.setDataset(1, xySeriesData); 
plot.setRenderer(1, xyLineRenderer); 
plot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD); 

Mi sospecha es que de alguna manera cada gráfico tiene que ser su propia trama y se combinan juntos. ¿Alguien puede ayudar? Lo que estoy buscando aquí es algo como esto: alt text

Excepto que no quiero que el gráfico de barras sea una imagen de fondo. El eje X debe ser el mismo, y el eje Y debe estar en el lado derecho con la escala adecuada que permita que el gráfico se muestre a tamaño completo.

Cualquier/todas las respuestas son apreciados ...

Respuesta

6

Veo que la adición de un segundo conjunto de datos y procesador a su trama, sino que los está obligando a utilizar el mismo eje rango. En su lugar, proporcione a la trama un nuevo NumberAxis para el rango del segundo conjunto de datos.

Como un lado, no pase por alto el ejemplo relacionado con el eje en el JFreeChart Demo, y no subestime el valor de JFreeChart Developer Guide.

+0

No afiliado con http://www.jfree.org/jfreechart/; solo un cliente satisfecho y colaborador ocasional. – trashgod

+1

Gracias por el empuje en la dirección correcta. Agregar: final ValueAxis yAxis = new NumberAxis ("Percent Time at Temperature"); \t \t plot.setRangeAxis (1, yAxis); plot.mapDatasetToRangeAxis (0, 1); MapDataSetToRange fue la clave ... – Griff