Reputation: 31096
My sample code looks like the following, I want to set my own color, but it comes with enlarged joints, how to set my own color, without enlarge the joints ?
import java.awt.*;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.*;
import org.jfree.data.time.Day;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.XYDataset;
public class Time_Series_Chart extends JFrame
{
private static final long serialVersionUID=1L;
static boolean EXIT_ON_CLOSE_B=true;
public Time_Series_Chart(String title)
{
super(title);
XYDataset dataset=createDataset();
JFreeChart chart=ChartFactory.createTimeSeriesChart("Time_Series_Chart", // Create chart
"Date", // X-Axis Label
// "Number", // Y-Axis Label
getYLabel("Number"), // Y-Axis Label
dataset);
XYPlot plot=(XYPlot)chart.getPlot();
plot.setBackgroundPaint(new Color(130,130,130)); // Changes background color
/*
XYLineAndShapeRenderer renderer=new XYLineAndShapeRenderer();
renderer.setSeriesPaint(0,Color.yellow);
renderer.setSeriesPaint(1,Color.green);
renderer.setSeriesPaint(2,new Color(200,20,200));
renderer.setSeriesStroke(0,new BasicStroke(0.5f));
renderer.setSeriesStroke(1,new BasicStroke(0.5f));
renderer.setSeriesStroke(2,new BasicStroke(0.5f));
plot.setRenderer(renderer); // <-- Comes with enlarged joints, not good.
*/
ChartPanel panel=new ChartPanel(chart);
setContentPane(panel);
}
private XYDataset createDataset()
{
TimeSeriesCollection dataset=new TimeSeriesCollection();
TimeSeries series1=new TimeSeries("Series1");
series1.add(new Day(1,1,2017),50);
series1.add(new Day(2,1,2017),40);
series1.add(new Day(3,1,2017),45);
series1.add(new Day(4,1,2017),30);
series1.add(new Day(5,1,2017),350);
series1.add(new Day(6,1,2017),45);
series1.add(new Day(7,1,2017),60);
series1.add(new Day(8,1,2017),45);
series1.add(new Day(9,1,2017),55);
series1.add(new Day(10,1,2017),48);
series1.add(new Day(11,1,2017),60);
series1.add(new Day(12,1,2017),45);
series1.add(new Day(13,1,2017),65);
series1.add(new Day(14,1,2017),45);
series1.add(new Day(15,1,2017),55);
dataset.addSeries(series1);
TimeSeries series2=new TimeSeries("Series2");
series2.add(new Day(1,1,2017),40);
series2.add(new Day(2,1,2017),35);
series2.add(new Day(3,1,2017),26);
series2.add(new Day(4,1,2017),45);
series2.add(new Day(5,1,2017),40);
series2.add(new Day(6,1,2017),35);
series2.add(new Day(7,1,2017),45);
series2.add(new Day(8,1,2017),48);
series2.add(new Day(9,1,2017),31);
series2.add(new Day(10,1,2017),32);
series2.add(new Day(11,1,2017),21);
series2.add(new Day(12,1,2017),35);
series2.add(new Day(13,1,2017),10);
series2.add(new Day(14,1,2017),25);
series2.add(new Day(15,1,2017),15);
dataset.addSeries(series2);
return dataset;
}
String getYLabel(String Text)
{
String Result="";
for (int i=0;i<Text.length();i++) Result+=Text.charAt(i)+(i<Text.length()-1?"\u2009":"");
// Out(Result);
return Result;
}
private static void out(String message) { System.out.print(message); }
private static void Out(String message) { System.out.println(message); }
public static void main(String[] args)
{
SwingUtilities.invokeLater(() ->
{
Time_Series_Chart demo=new Time_Series_Chart("Time_Series_Chart");
demo.setSize(800,400);
if (EXIT_ON_CLOSE_B) demo.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
demo.setLocationRelativeTo(null);
demo.setVisible(true);
});
}
}
Upvotes: 1
Views: 74
Reputation: 205855
Some alternatives:
Obtain a reference to your chosen chart factory's existing renderer and invoke setDefaultShapesVisible(false)
explicitly:
XYPlot plot=(XYPlot)chart.getPlot();
…
XYLineAndShapeRenderer r = (XYLineAndShapeRenderer) plot.getRenderer();
r.setDefaultShapesVisible(false);
r.set…
Create your own factory, as shown here, using the original as a guide. Note the factory already specifies that lines should be visible, but not shapes.
XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer(true, false);
Upvotes: 1
Reputation: 31096
I found the answer :
renderer.setSeriesShapesVisible(0,false);
renderer.setSeriesShapesVisible(1,false);
Upvotes: 1