Thank you very much for all the help you always give.
I have to save the following image
but when I use the Jfreechart utility (ChartUtils.saveChartAsPNG) to save I can only save each graph separately and not the complete one.
And when I use the (BufferedImage) utility, it stores in very bad quality, many blurry pixels, poor resolution.
What other alternative can I use?
This is my code:
String direccionTXTlinea = "\\\\172.16.40.10\\Geodesia\\volcanes\\lineas\\Maule_PUEL-MAU2.txt";
LectorTXT lectorTXT = new LectorTXT();
lectorTXT.leerTXTlinea(direccionTXTlinea);
TransformarTXT transformarTXT = new TransformarTXT();
transformarTXT.transformarDatosLinea(lectorTXT.getListaLinea());
GeneradorTimeSerie timeSerieTXT = new GeneradorTimeSerie();
timeSerieTXT.setTransformarTXT(transformarTXT);
timeSerieTXT.crearTimeSerieTXT();
TimeSeriesCollection UNO = new TimeSeriesCollection();
TimeSeriesCollection DOS = new TimeSeriesCollection();
TimeSeriesCollection TRES = new TimeSeriesCollection();
UNO.addSeries(timeSerieTXT.getSerieUNOmasERROR());
UNO.addSeries(timeSerieTXT.getSerieUNO());
UNO.addSeries(timeSerieTXT.getSerieUNOmenosERROR());
DOS.addSeries(timeSerieTXT.getSerieDOSmasERROR());
DOS.addSeries(timeSerieTXT.getSerieDOS());
DOS.addSeries(timeSerieTXT.getSerieDOSmenosERROR());
TRES.addSeries(timeSerieTXT.getSerieTRESmasERROR());
TRES.addSeries(timeSerieTXT.getSerieTRES());
TRES.addSeries(timeSerieTXT.getSerieTRESmenosERROR());
XYDataset datasetUNO = UNO;
XYDataset datasetDOS = DOS;
NumberAxis rangeAxis1 = new NumberAxis("L.Linea cm");
rangeAxis1.setAutoRangeIncludesZero(false);
XYItemRenderer renderer1 = new StandardXYItemRenderer();
renderer1.setSeriesPaint(0, Color.decode("#C1ECFF"));
renderer1.setSeriesPaint(2, Color.decode("#C1ECFF"));
renderer1.setSeriesPaint(1, Color.decode("#00067F"));
XYPlot subplot1 = new XYPlot(datasetUNO, null, rangeAxis1, renderer1);
NumberAxis rangeAxis2 = new NumberAxis("D.Vertical cm 2");
rangeAxis2.setAutoRangeIncludesZero(false);
XYItemRenderer renderer2 = new StandardXYItemRenderer();
renderer2.setSeriesPaint(0, Color.decode("#FF8B8A"));
renderer2.setSeriesPaint(2, Color.decode("#FF8B8A"));
renderer2.setSeriesPaint(1, Color.decode("#FF0800"));
XYPlot subplot2 = new XYPlot(datasetDOS, null, rangeAxis2, renderer2);
ValueAxis domainAxis = new DateAxis();
CombinedDomainXYPlot plot = new CombinedDomainXYPlot();
plot.setDomainAxis(domainAxis);
plot.add(subplot1, 1);
plot.add(subplot2, 1);
plot.setOrientation(PlotOrientation.VERTICAL);
String Estacion1 = "\\\\172.16.40.10\\Geodesia\\volcanes\\zona2\\Maule\\Maule_mau2.txt";
String Estacion2 = "\\\\172.16.40.10\\Geodesia\\volcanes\\zona2\\Maule\\Maule_nieb.txt";
LectorTXT lectorTXTEstacion1 = new LectorTXT();
LectorTXT lectorTXTEstacion2 = new LectorTXT();
lectorTXTEstacion1.leerTXTlinea(Estacion1);
lectorTXTEstacion2.leerTXTlinea(Estacion2);
TransformarTXT transformarTXTestacion1 = new TransformarTXT();
transformarTXTestacion1.transformarDatosEstacion(lectorTXTEstacion1.getListaLinea());
TransformarTXT transformarTXTestacion2 = new TransformarTXT();
transformarTXTestacion2.transformarDatosEstacion(lectorTXTEstacion2.getListaLinea());
GeneradorTimeSerie timeSerieTXT1 = new GeneradorTimeSerie();
timeSerieTXT1.setTransformarTXT(transformarTXTestacion1);
GeneradorTimeSerie timeSerieTXT2 = new GeneradorTimeSerie();
timeSerieTXT2.setTransformarTXT(transformarTXTestacion2);
timeSerieTXT1.crearTimeSerieTXT();
timeSerieTXT2.crearTimeSerieTXT();
TimeSeriesCollection UNO1 = new TimeSeriesCollection();
TimeSeriesCollection DOS1 = new TimeSeriesCollection();
TimeSeriesCollection TRES1 = new TimeSeriesCollection();
TimeSeriesCollection UNO2 = new TimeSeriesCollection();
TimeSeriesCollection DOS2 = new TimeSeriesCollection();
TimeSeriesCollection TRES2 = new TimeSeriesCollection();
UNO1.addSeries(timeSerieTXT1.getSerieDOSmasERROR());
UNO1.addSeries(timeSerieTXT1.getSerieDOS());
UNO1.addSeries(timeSerieTXT1.getSerieDOSmenosERROR());
DOS1.addSeries(timeSerieTXT1.getSerieDOSmasERROR());
DOS1.addSeries(timeSerieTXT1.getSerieDOS());
DOS1.addSeries(timeSerieTXT1.getSerieDOSmenosERROR());
TRES1.addSeries(timeSerieTXT1.getSerieTRESmasERROR());
TRES1.addSeries(timeSerieTXT1.getSerieTRES());
TRES1.addSeries(timeSerieTXT1.getSerieTRESmenosERROR());
UNO2.addSeries(timeSerieTXT2.getSerieDOSmasERROR());
UNO2.addSeries(timeSerieTXT2.getSerieDOS());
UNO2.addSeries(timeSerieTXT2.getSerieDOSmenosERROR());
DOS2.addSeries(timeSerieTXT2.getSerieDOSmasERROR());
DOS2.addSeries(timeSerieTXT2.getSerieDOS());
DOS2.addSeries(timeSerieTXT2.getSerieDOSmenosERROR());
TRES2.addSeries(timeSerieTXT2.getSerieTRESmasERROR());
TRES2.addSeries(timeSerieTXT2.getSerieTRES());
TRES2.addSeries(timeSerieTXT2.getSerieTRESmenosERROR());
XYDataset datasetUNO1 = UNO1;
XYDataset datasetDOS1 = DOS1;
XYDataset datasetTRES1 = TRES1;
XYDataset datasetUNO2 = UNO2;
XYDataset datasetDOS2 = DOS2;
XYDataset datasetTRES2 = TRES2;
NumberAxis rangeAxis11 = new NumberAxis("Norte cm");
rangeAxis11.setAutoRangeIncludesZero(false);
XYItemRenderer renderer11 = new StandardXYItemRenderer();
renderer11.setSeriesPaint(0, Color.decode("#C1ECFF"));
renderer11.setSeriesPaint(2, Color.decode("#C1ECFF"));
renderer11.setSeriesPaint(1, Color.decode("#00067F"));
XYPlot subplot11 = new XYPlot(datasetUNO1, null, rangeAxis11, renderer11);
NumberAxis rangeAxis21 = new NumberAxis("Este cm");
rangeAxis21.setAutoRangeIncludesZero(false);
XYItemRenderer renderer21 = new StandardXYItemRenderer();
renderer21.setSeriesPaint(0, Color.decode("#A8FFA4"));
renderer21.setSeriesPaint(2, Color.decode("#A8FFA4"));
renderer21.setSeriesPaint(1, Color.decode("#15FF1B"));
XYPlot subplot21 = new XYPlot(datasetDOS1, null, rangeAxis21, renderer21);
NumberAxis rangeAxis31 = new NumberAxis("Vertical cm");
rangeAxis31.setAutoRangeIncludesZero(false);
XYItemRenderer renderer31 = new StandardXYItemRenderer();
renderer31.setSeriesPaint(0, Color.decode("#FF8B8A"));
renderer31.setSeriesPaint(2, Color.decode("#FF8B8A"));
renderer31.setSeriesPaint(1, Color.decode("#FF0800"));
XYPlot subplot31 = new XYPlot(datasetTRES1, null, rangeAxis31, renderer31);
ValueAxis domainAxis1 = new DateAxis();
CombinedDomainXYPlot plot1 = new CombinedDomainXYPlot();
plot1.setDomainAxis(domainAxis1);
plot1.add(subplot11, 1);
plot1.add(subplot21, 1);
plot1.add(subplot31, 1);
plot1.setOrientation(PlotOrientation.VERTICAL);
NumberAxis rangeAxis12 = new NumberAxis("Norte cm");
rangeAxis12.setAutoRangeIncludesZero(false);
XYItemRenderer renderer12 = new StandardXYItemRenderer();
renderer12.setSeriesPaint(0, Color.decode("#C1ECFF"));
renderer12.setSeriesPaint(2, Color.decode("#C1ECFF"));
renderer12.setSeriesPaint(1, Color.decode("#00067F"));
XYPlot subplot12 = new XYPlot(datasetUNO2, null, rangeAxis12, renderer12);
NumberAxis rangeAxis22 = new NumberAxis("Este cm");
rangeAxis22.setAutoRangeIncludesZero(false);
XYItemRenderer renderer22 = new StandardXYItemRenderer();
renderer22.setSeriesPaint(0, Color.decode("#A8FFA4"));
renderer22.setSeriesPaint(2, Color.decode("#A8FFA4"));
renderer22.setSeriesPaint(1, Color.decode("#15FF1B"));
XYPlot subplot22 = new XYPlot(datasetDOS2, null, rangeAxis22, renderer22);
NumberAxis rangeAxis32 = new NumberAxis("Vertical cm");
rangeAxis32.setAutoRangeIncludesZero(false);
XYItemRenderer renderer32 = new StandardXYItemRenderer();
renderer32.setSeriesPaint(0, Color.decode("#FF8B8A"));
renderer32.setSeriesPaint(2, Color.decode("#FF8B8A"));
renderer32.setSeriesPaint(1, Color.decode("#FF0800"));
XYPlot subplot32 = new XYPlot(datasetTRES2, null, rangeAxis32, renderer32);
ValueAxis domainAxis2 = new DateAxis();
CombinedDomainXYPlot plot2 = new CombinedDomainXYPlot();
plot2.setDomainAxis(domainAxis2);
plot2.add(subplot12, 1);
plot2.add(subplot22, 1);
plot2.add(subplot32, 1);
plot2.setOrientation(PlotOrientation.VERTICAL);
JFreeChart a = new JFreeChart("Linea: ",JFreeChart.DEFAULT_TITLE_FONT, plot, false);
JFreeChart b = new JFreeChart("Estacion GPS: ",JFreeChart.DEFAULT_TITLE_FONT, plot1, false);
JFreeChart c = new JFreeChart("Estacion GPS: ",JFreeChart.DEFAULT_TITLE_FONT, plot2, false);
ChartPanel panel = new ChartPanel(a, true, true, true, true, true);
ChartPanel panel2 = new ChartPanel(b, true, true, true, true, true);
ChartPanel panel3 = new ChartPanel(c, true, true, true, true, true);
Dimension dmnsn = new Dimension(950, 500);
Dimension dmnsn2 = new Dimension(1900, 500);
panel.setMaximumDrawHeight(500);
panel.setMinimumDrawHeight(450);
panel.setMaximumDrawWidth(1900);
panel.setMinimumDrawWidth(950);
panel.setMinimumSize(dmnsn2);
panel2.setMinimumSize(dmnsn);
panel3.setMinimumSize(dmnsn);
JFrame frame = new JFrame("VOLCAN");
JPanel asd = new JPanel();
asd.setLayout(new GridBagLayout());
GridBagConstraints csd = new GridBagConstraints();
JLabel volcan = new JLabel("el volcan");
csd.gridx = 0;
csd.gridy = 0;
csd.gridwidth = 2;
asd.add(volcan, csd);
frame.add(asd);
csd.gridx = 0;
csd.gridy = 1;
csd.gridwidth = 1;
asd.add(panel3, csd);
frame.add(asd);
csd.gridx = 1;
csd.gridy = 1;
csd.gridwidth = 1;
asd.add(panel2, csd);
frame.add(asd);
csd.gridx = 0;
csd.gridy = 2;
csd.gridwidth =2;
asd.add(panel, csd);
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
Related
I would like to create a table which is by the right side of the graph which shows 2 columns of what x and y values have been inputted into the xSpin and ySpin spinners. I have drawn a picture of where I would like the table to reside. I have tried using textboxes in a grid pane layout to create a table and inputting the values directly into a grid of text boxes, however I couldn't add them individually to the series.
.
package Grava;
public class ScatterAdd extends Application {
private final XYSeries series = new XYSeries("Voltage");
private final XYSeries trend = new XYSeries("Trend");
private final XYSeriesCollection dataset = new XYSeriesCollection(series);
ChoiceBox<String> domainLabels = new ChoiceBox<>();
ChoiceBox<String> rangeLabels = new ChoiceBox<>();
private JFreeChart createChart() {
return ChartFactory.createScatterPlot("VI Characteristics", "Current", "Voltage", dataset);
}
#Override
public void start(Stage stage) {
Image image = new Image("Grava.logo.png");
stage.getIcons().add(image);
var chart = createChart();
XYPlot plot = chart.getXYPlot();
plot.setDomainCrosshairVisible(true);
plot.setRangeCrosshairVisible(true);
XYLineAndShapeRenderer r = (XYLineAndShapeRenderer) plot.getRenderer();
r.setSeriesLinesVisible(1, Boolean.TRUE);
r.setSeriesShapesVisible(1, Boolean.FALSE);
var equation = new TextField();
series.addChangeListener((event) -> {
if (series.getItemCount() > 1) {
double[] coefficients = Regression.getOLSRegression(dataset, 0);
double b = coefficients[0]; // intercept
double m = coefficients[1]; // slope
equation.setText("y = " + m + " x + " + b);
double x = series.getDataItem(0).getXValue();
trend.clear();
trend.add(x, m * x + b);
x = series.getDataItem(series.getItemCount() - 1).getXValue();
trend.add(x, m * x + b);
dataset.addSeries(trend);
}
});
domainLabels.getSelectionModel().selectedItemProperty().addListener((ov, s0, s1) -> {
chart.getXYPlot().getDomainAxis().setLabel(s1);
});
rangeLabels.getSelectionModel().selectedItemProperty().addListener((ov, s0, s1) -> {
chart.getXYPlot().getRangeAxis().setLabel(s1);
});
domainLabels.getItems().addAll("Current", "Seconds");
domainLabels.setValue("Current");
rangeLabels.getItems().addAll("Voltage", "Metres");
rangeLabels.setValue("Voltage");
var xSpin = new Spinner<Double>(-10000000.000, 10000000.000, 0, 0.1);
xSpin.setEditable(true);
xSpin.setPromptText("Xvalue");
var ySpin = new Spinner<Double>(-10000000.000, 10000000.000, 0, 0.1);
ySpin.setEditable(true);
ySpin.setPromptText("Yvalue");
var button = new Button("Add");
button.setOnAction(ae -> series.add(xSpin.getValue(), ySpin.getValue()));
HBox xBox = new HBox();
xBox.getChildren().addAll(domainLabels);
HBox yBox = new HBox();
yBox.getChildren().addAll(rangeLabels);
var enter = new ToolBar(xBox, xSpin, yBox, ySpin, button, equation);
BorderPane.setAlignment(enter, Pos.CENTER);
BorderPane root = new BorderPane();
root.setCenter(new ChartViewer(chart));
root.setBottom(enter);
stage.setTitle("ScatterAdd");
stage.setScene(new Scene(root, 720, 480));
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
I have an issue with my jfreechart graph. Actually at x-axis the value are in big numbers (i-e 1500-2000) and the amounts of these values are also too large (i.e in significant notation).So the chart is just showing a dashed line instead of values at x-axis.
public static byte[] createImageByXyChart(String str_chartLabel,
String str_xAxisLabel, String str_yAxisLabel,
String str_fileFormat, Integer i_height, Integer i_width,
List<double[]> co_ordinates) throws IOException {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
for (int i = 0; i < co_ordinates.size(); i++) {
double[] xy_coOrdinates = co_ordinates.get(i);
double xCoordiate = xy_coOrdinates[0];
double yCoordiate = xy_coOrdinates[1];
dataset.setValue(yCoordiate, str_chartLabel, "" + xCoordiate);
}
JFreeChart chart =
ChartFactory.createLineChart(str_chartLabel,str_xAxisLabel,
str_yAxisLabel, dataset);
CategoryPlot plot = (CategoryPlot) chart.getPlot();
plot.setBackgroundPaint(Color.white);
plot.setRangePannable(true);
plot.setRangeGridlinesVisible(true);
plot.setDomainGridlinesVisible(true);
plot.setDomainGridlineStroke(new BasicStroke(1.0f));
plot.setRangeGridlineStroke(new BasicStroke(1.0f));
plot.setDomainGridlinePaint(Color.GRAY.brighter());
plot.setRangeGridlinePaint(Color.GRAY.brighter());
ChartPanel panel = new ChartPanel(chart);
JFrame frame = new JFrame("Show chart");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(panel);
frame.setSize(600, 600);
frame.setVisible(true);
return null;
}
public static void main(String[] arg) throws Exception {
System.out.println("########################### ");
File fileData = new File("curve.txt");
BufferedReader br = new BufferedReader(new FileReader(fileData));
List<double[]> co_ordinates = new ArrayList<double[]>();
String line = null;
while ((line = br.readLine()) != null) {
String[] abcd = line.split(",");
double[] xy_cor = new double[2];
NumberFormat df = new DecimalFormat("######.####");
xy_cor[0] = Double.parseDouble(df.format(Double
.parseDouble(abcd[0])));
System.out.println(xy_cor[0]);
xy_cor[1] = Double.parseDouble(abcd[1]);
System.out.println(Arrays.toString(xy_cor));
co_ordinates.add(xy_cor);
}
br.close();
String str_chartLaber = "Curve";
String str_xAxisLabel = "Time(s)";
String str_yAxisLaber = "Accelaration (mm_per__s_2)";
String str_fileFormate = ImageFormats.JPEG;
Integer heigth = 1800;
Integer width = 1080;
byte[] image_bytes = ImageUtils.createImageByXyChart(str_chartLaber,
str_xAxisLabel, str_yAxisLaber, str_fileFormate, heigth, width,
co_ordinates);
}
the input data is that
Heading
i use
XYDataset dataset ;
instead of
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
The XYDataset enable auto interval where DefaultCategoryDataset do not.I don't know the reason but it is.
I am trying to create a curve graph using the function in the library CubicLineChart Achartengine, but the point with a line is not fused as shown below:
I added more smooth in my chart, but the line with points farther away, this is my code :
onPaint(){
XYMultipleSeriesDataset mDataset = new XYMultipleSeriesDataset();
XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer();
XYSeries mCurrentSeries = null;
XYSeriesRenderer mCurrentRenderer;
String [] bulan= {"jan", "feb", "mar", "apr", "jun", "jul", "agt", "sep", "okt", "nov", "des"};
int[] colors = new int[] { Color.RED, Color.GREEN};
PointStyle[] styles = new PointStyle[] { PointStyle.CIRCLE, PointStyle.CIRCLE};
// mDataset.removeSeries(mCurrentSeries);
mRenderer = new XYMultipleSeriesRenderer();
mRenderer.setAxisTitleTextSize(14);
mRenderer.setChartTitleTextSize(14);
mRenderer.setLabelsTextSize(15);
mRenderer.setLegendTextSize(15);
mRenderer.setMargins(new int[] { 0, 15, 10, 0 });
mRenderer.setZoomButtonsVisible(false);//untuk hilangin zoomnya
mRenderer.setPanEnabled(false, false);
mRenderer.setZoomEnabled(false, false);
mRenderer.setPointSize(2f);
mRenderer.setMarginsColor(Color.TRANSPARENT);
mRenderer.setShowGrid(true);
String seriesTitle = "";
XYSeries series = new XYSeries(seriesTitle);
mDataset.addSeries(series);
mCurrentSeries = series;
XYSeriesRenderer renderer = new XYSeriesRenderer();
renderer.setFillBelowLine(true);
renderer.setFillBelowLineColor(Color.TRANSPARENT);
renderer.setColor(Color.BLUE);
renderer.setPointStyle(PointStyle.CIRCLE);
mRenderer.addSeriesRenderer(renderer);
mRenderer.setInScroll(true);
mRenderer.setShowLegend(false);
mRenderer.setShowGridX(true);
mRenderer.setShowGridY(false);
mRenderer.setXLabels(bulan.length);
mRenderer.setYLabels(5);
mRenderer.setMarginsColor(Color.argb(0x00, 0x01, 0x01, 0x01));//hilangin background hitam disekeliling grafik
renderer.setFillPoints(true);
mCurrentRenderer = renderer;
for (int i = 0; i < bulan.length; i++) {
mCurrentSeries.add(i,jumlah[i]);
}
if (mChartView != null) {
piechart.removeView(mChartView);
}
mChartView = ChartFactory.getCubeLineChartView(applicationContext, mDataset, mRenderer, 0.17f);
piechart.addView(mChartView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
pw_kn.showAtLocation(popUpKN, Gravity.CENTER, 0, 0);
}
is there something wrong with my code?
In my jfree line chart the x and y axis line is drawn seperated.. I need to get both the axis meet at the orgin.
Here is the Actual Image im getting from jfree line chart
How to join the two axis line at the orgin in jfree line chart...
I've tried by using this code sample
final DefaultCategoryDataset lineDataset = new DefaultCategoryDataset();
lineDataset.addValue(10, "Dep", "2009");
lineDataset.addValue(11, "Dep", "2010");
lineDataset.addValue(10, "Dep", "2011");
lineDataset.addValue(10, "Dep", "2012");
lineDataset.addValue(7, "Dia", "2009");
lineDataset.addValue(7, "Dia", "2010");
lineDataset.addValue(7, "Dia", "2011");
lineDataset.addValue(7, "Dia", "2012");
lineDataset.addValue(3, "HD", "2009");
lineDataset.addValue(3, "HD", "2010");
lineDataset.addValue(3, "HD", "2011");
lineDataset.addValue(3, "HD", "2012");
lineDataset.addValue(16, "HBP", "2009");
lineDataset.addValue(15, "HBP", "2010");
lineDataset.addValue(18, "HBP", "2011");
lineDataset.addValue(17, "HBP", "2012");
lineDataset.addValue(16, "HC", "2009");
lineDataset.addValue(15, "HC", "2010");
lineDataset.addValue(16, "HC", "2011");
lineDataset.addValue(16, "HC", "2012");
lineDataset.addValue(6, "LBP", "2009");
lineDataset.addValue(7, "LBP", "2010");
lineDataset.addValue(6, "LBP", "2011");
lineDataset.addValue(6, "LBP", "2012");
final JFreeChart chart = ChartFactory.createLineChart(
"", // chart title
"", // domain axis label
"", // range axis label
lineDataset, // data
PlotOrientation.VERTICAL, // orientation
false, // include legend
false, // tooltips
false // urls
);
chart.setBackgroundPaint(Color.WHITE);
final CategoryPlot plot = (CategoryPlot) chart.getPlot();
plot.setBackgroundPaint(Color.WHITE);
plot.setOutlineVisible(false);
plot.setRangeGridlinePaint(Color.white);
final CategoryAxis categoryAxis = plot.getDomainAxis();
categoryAxis.setAxisLineVisible(true);
categoryAxis.setTickMarksVisible(false);
categoryAxis.setMaximumCategoryLabelLines(2);
categoryAxis.setLowerMargin(-0.1);
categoryAxis.setTickLabelPaint(Color.decode("#222222"));
chart.setPadding(new RectangleInsets(0, -8, 0, 0));
// categoryAxis.setTickLabelFont(font);
final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
rangeAxis.setVisible(true);
// rangeAxis.setRange(minRange, maxRange);
// rangeAxis.setTickUnit(new NumberTickUnit(2));
rangeAxis.setTickLabelsVisible(true);
rangeAxis.setLowerMargin(1);
final LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot.getRenderer();
renderer.setBaseShapesVisible(true);
renderer.setBaseShapesFilled(true);
renderer.setSeriesStroke(0, new BasicStroke(1.2f));
renderer.setSeriesItemLabelsVisible(1, Boolean.TRUE);
Shape circle = new Ellipse2D.Double(-3, -3, 6, 6);
renderer.setSeriesShape(0, circle);
renderer.setSeriesShape(1, circle);
renderer.setSeriesShape(2, circle);
renderer.setSeriesShape(3, circle);
renderer.setSeriesShape(4, circle);
renderer.setSeriesShape(5, circle);
// renderer.setBaseItemLabelGenerator(new CustomLabelGenerator());
renderer.setItemLabelAnchorOffset(-5);
renderer.setBaseItemLabelsVisible(true);
plot.getRenderer().setSeriesPaint(0, Color.decode("#4E7AD3"));
plot.getRenderer().setSeriesPaint(1, Color.decode("#DC3912"));
plot.getRenderer().setSeriesPaint(2, Color.decode("#FF9900"));
plot.getRenderer().setSeriesPaint(3, Color.decode("#109618"));
plot.getRenderer().setSeriesPaint(4, Color.decode("#990099"));
plot.getRenderer().setSeriesPaint(5, Color.decode("#0099C6"));
// renderer.setBaseItemLabelFont(font);
// plot.getRenderer().setSeriesPaint(1, Color.WHITE);
try {
BufferedImage bi;
bi = chart.createBufferedImage(300, 100);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(bi, "png", baos);
byte[] byteArray = baos.toByteArray();
// rangeAxis.setRangeWithMargins(min(min), max(max));
String rootpath = this.getRootPath();
String imagePath = rootpath + TEMP_FILE_PATH + File.separator + "HighLightGraph_" + 1 + ".png";
System.out.println("=========imagePath============"+imagePath);
ChartUtilities.saveChartAsPNG(new File(imagePath), chart, 500, 300);
// this.recordImageData("highlightChart" + "-" + "1", org.apache.catalina.util.Base64.encode(byteArray));
} catch (Exception e) {
}
Add the line:
plot.setAxisOffset(new RectangleInsets(0,0,0,0));
to your code after
final CategoryPlot plot = (CategoryPlot) chart.getPlot();
Link to JFreeChart Java Doc
im working with jfreechart and try to make a XYLineChart which is working very well.
My problem is, that the y label are double values and i need strings.
My Code:
DefaultXYDataset result = new DefaultXYDataset();
XYSeries series1 = new XYSeries("Words");
series1.add(0, 0.3);
series1.add(1, 0.5);
series1.add(2, 0.6);
series1.add(3, 0.3);
series1.add(4, 0.2);
series1.add(5, 1);
result.addSeries(getTitle(), series1.toArray());
I want something like:
XYSeries series1 = new XYSeries("Words");
series1.add("word 1", 0.3);
series1.add("word 2", 0.5);
...
The updated code using Symbol-Axis:
private void test2() {
XYDataset dataset = createDataset2();
JFreeChart chart = createChart2(dataset, "NN");
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(500, 250));
panel_visualize.add(chartPanel);
}
private DefaultXYDataset createDataset2()
{
DefaultXYDataset result = new DefaultXYDataset();
XYSeries series1 = new XYSeries("Words");
series1.add(0.3, 0);
series1.add(0.5, 1);
series1.add(0.6, 2);
series1.add(0.3, 3);
series1.add(0.2, 4);
result.addSeries(getTitle(), series1.toArray());
return result;
}
private JFreeChart createChart2(XYDataset dataset, String title)
{
JFreeChart chart = ChartFactory.createXYLineChart(title, // chart title
"Words",
"Activation",
dataset, // data
PlotOrientation.HORIZONTAL,
true, // include legend
true,
false);
XYPlot plot = (XYPlot) chart.getPlot();
plot.setForegroundAlpha(0.5f);
String[] grade = new String[5];
grade[0] = "Temp 0";
grade[1] = "Temp 1";
grade[2] = "Temp 2";
grade[3] = "Temp 3";
grade[4] = "Temp 4";
SymbolAxis rangeAxis = new SymbolAxis("Words", grade);
rangeAxis.setTickUnit(new NumberTickUnit(1));
rangeAxis.setRange(0,grade.length);
plot.setRangeAxis(rangeAxis);
return chart;
}
Using:
plot.setDomainAxis(rangeAxis);
solves my problem.
Thanks to trashgod for the help.