use of org.jfree.chart.plot.XYPlot in project crypto-bot by jnidzwetzki.
the class Chart method showChart.
public void showChart() {
/**
* Building chart datasets
*/
TimeSeriesCollection dataset = new TimeSeriesCollection();
dataset.addSeries(buildChartTimeSeries(timeSeries, new ClosePriceIndicator(timeSeries), symbol));
dataset.addSeries(buildChartTimeSeries(timeSeries, new EMAIndicator(new ClosePriceIndicator(timeSeries), 5), "EMA5"));
dataset.addSeries(buildChartTimeSeries(timeSeries, new EMAIndicator(new ClosePriceIndicator(timeSeries), 10), "EMA10"));
dataset.addSeries(buildChartTimeSeries(timeSeries, new EMAIndicator(new ClosePriceIndicator(timeSeries), 40), "EMA40"));
/**
* Creating the chart
*/
JFreeChart chart = // title
ChartFactory.createTimeSeriesChart(// title
"BTC", // x-axis label
"Date", // y-axis label
"Price", // data
dataset, // create legend?
true, // generate tooltips?
true, // generate URLs?
false);
XYPlot plot = (XYPlot) chart.getPlot();
DateAxis axis = (DateAxis) plot.getDomainAxis();
axis.setDateFormatOverride(new SimpleDateFormat("MM-dd-yyyy HH:mm"));
addBuySellSignals(timeSeries, strategy, plot);
displayChart(chart);
}
use of org.jfree.chart.plot.XYPlot in project polyGembler by c-zhou.
the class JfreeChart method plotLineChart.
private void plotLineChart(String file_in, Dimension dim, Color color, String position, String title) {
JPanel collinearChart = new JPanel();
collinearChart.setSize(dim);
collinearChart.setMinimumSize(dim);
collinearChart.setPreferredSize(dim);
collinearChart.setBackground(color);
final XYSeriesCollection lineSeries = new XYSeriesCollection();
int n1 = 0;
double x_max = Double.NEGATIVE_INFINITY, y_max = Double.NEGATIVE_INFINITY;
try {
BufferedReader br = Utils.getBufferedReader(file_in);
String line = br.readLine();
String[] s;
int series = 0;
while ((line = br.readLine()) != null && line.length() > 0) {
s = line.split("\\s+");
series = Integer.parseInt(s[2]);
if (lineSeries.getSeriesCount() < series) {
lineSeries.addSeries(new XYSeries(series));
n1 = 0;
}
double x = Double.parseDouble(s[1]) / 1000, y = Double.parseDouble(s[0]);
lineSeries.getSeries(series - 1).add(x, y);
if (x > x_max)
x_max = x;
if (y > y_max)
y_max = y;
n1++;
}
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
final int n = n1;
final int m = lineSeries.getSeriesCount();
// create error bars
final XYSeriesCollection errorBarSeries2 = new XYSeriesCollection();
for (int i = 0; i < n; i++) {
double[] f = new double[m];
for (int j = 0; j < m; j++) f[j] = lineSeries.getSeries(j).getY(i).doubleValue();
double mean = StatUtils.mean(f), sd = Math.sqrt(StatUtils.variance(f));
double x = lineSeries.getSeries(0).getX(i).doubleValue();
errorBarSeries2.addSeries(new XYSeries(i));
errorBarSeries2.getSeries(i).add(x, mean - sd);
errorBarSeries2.getSeries(i).add(x, mean);
errorBarSeries2.getSeries(i).add(x, mean + sd);
}
final XYSeriesCollection upperBoundSeries = new XYSeriesCollection();
final XYSeriesCollection upperQ3Series = new XYSeriesCollection();
final XYSeriesCollection boxSeriesE = new XYSeriesCollection();
final XYSeriesCollection boxSeriesN = new XYSeriesCollection();
final XYSeriesCollection boxSeriesW = new XYSeriesCollection();
final XYSeriesCollection boxSeriesS = new XYSeriesCollection();
final XYSeriesCollection q2Series = new XYSeriesCollection();
final XYSeriesCollection lowerQ2Series = new XYSeriesCollection();
final XYSeriesCollection lowerBoundSeries = new XYSeriesCollection();
final XYSeriesCollection meanDotSeries = new XYSeriesCollection();
final XYSeriesCollection fillingSeries = new XYSeriesCollection();
for (int i = 0; i < n; i++) {
double[] f = new double[m];
for (int j = 0; j < m; j++) f[j] = lineSeries.getSeries(j).getY(i).doubleValue();
double q1 = StatUtils.percentile(f, 25), q2 = StatUtils.percentile(f, 50), q3 = StatUtils.percentile(f, 75);
double IQR = q3 - q1;
double[] boundary = new double[] { q1 - 1.5 * IQR, q3 + 1.5 * IQR };
final Set<Integer> outliers = new HashSet<Integer>();
for (int k = 0; k < m; k++) if (f[k] < boundary[0] || f[k] > boundary[1])
outliers.add(k);
double lower_bound = Double.POSITIVE_INFINITY, upper_bound = Double.NEGATIVE_INFINITY;
for (int k = 0; k < m; k++) {
if (outliers.contains(k))
continue;
if (f[k] < lower_bound)
lower_bound = f[k];
if (f[k] > upper_bound)
upper_bound = f[k];
}
double x = lineSeries.getSeries(0).getX(i).doubleValue();
double mean = StatUtils.mean(f);
if (mean >= thres) {
int w = upperBoundSeries.getSeriesCount();
upperBoundSeries.addSeries(new XYSeries(i));
upperBoundSeries.getSeries(w).add(x - half_width, upper_bound);
upperBoundSeries.getSeries(w).add(x + half_width, upper_bound);
upperQ3Series.addSeries(new XYSeries(i));
upperQ3Series.getSeries(w).add(x, upper_bound);
upperQ3Series.getSeries(w).add(x, q3);
boxSeriesE.addSeries(new XYSeries(i));
boxSeriesE.getSeries(w).add(x + half_width, q1);
boxSeriesE.getSeries(w).add(x + half_width, q3);
boxSeriesN.addSeries(new XYSeries(i));
boxSeriesN.getSeries(w).add(x + half_width, q3);
boxSeriesN.getSeries(w).add(x - half_width, q3);
boxSeriesW.addSeries(new XYSeries(i));
boxSeriesW.getSeries(w).add(x - half_width, q3);
boxSeriesW.getSeries(w).add(x - half_width, q1);
boxSeriesS.addSeries(new XYSeries(i));
boxSeriesS.getSeries(w).add(x - half_width, q1);
boxSeriesS.getSeries(w).add(x + half_width, q1);
q2Series.addSeries(new XYSeries(i));
q2Series.getSeries(w).add(x - half_width, q2);
q2Series.getSeries(w).add(x + half_width, q2);
lowerQ2Series.addSeries(new XYSeries(i));
lowerQ2Series.getSeries(w).add(x, q1);
lowerQ2Series.getSeries(w).add(x, lower_bound);
lowerBoundSeries.addSeries(new XYSeries(i));
lowerBoundSeries.getSeries(w).add(x - half_width, lower_bound);
lowerBoundSeries.getSeries(w).add(x + half_width, lower_bound);
double x_inter = x - half_width, x_end = x + half_width;
while (x_inter < x_end) {
XYSeries tmp = new XYSeries("shading");
tmp.add(x_inter, q1);
tmp.add(x_inter, q3);
fillingSeries.addSeries(tmp);
x_inter += 0.01;
}
}
meanDotSeries.addSeries(new XYSeries(i));
meanDotSeries.getSeries(i).add(x, mean);
}
final JFreeChart chart = ChartFactory.createXYLineChart(null, // domain axis label
null, // range axis label
null, // data
null, PlotOrientation.VERTICAL, // include legend
false, // tooltips?
true, // URL generator? Not required...
false);
final NumberAxis domainAxis = new NumberAxis("SNP Physical Position (Kb) [" + n + " SNPs]");
final NumberAxis rangeAxis = new NumberAxis("Estimated RF");
domainAxis.setTickUnit(new NumberTickUnit(50));
domainAxis.setRange(-x_max / 20 / dim.getWidth() * dim.getHeight(), x_max * (1 + 0.1 / dim.getWidth() * dim.getHeight()));
rangeAxis.setRange(-y_max / 20, y_max * 1.1);
domainAxis.setLabelFont(font3);
rangeAxis.setLabelFont(font3);
domainAxis.setTickLabelFont(font4);
rangeAxis.setTickLabelFont(font4);
XYPlot plot = chart.getXYPlot();
plot.setDomainAxis(domainAxis);
plot.setRangeAxis(rangeAxis);
for (int i = 0; i < meanDotSeries.getSeriesCount(); i++) {
double mean = meanDotSeries.getSeries(i).getY(0).doubleValue();
if (mean < thres)
continue;
double x = meanDotSeries.getSeries(i).getX(0).doubleValue();
XYTextAnnotation anno = new XYTextAnnotation(String.format(formatStr2, mean) + "\u00B1" + String.format(formatStr2, mean - errorBarSeries2.getSeries(i).getY(0).doubleValue()), x > x_max / 2 ? x - 30 : x + 30, mean);
anno.setFont(font3);
plot.addAnnotation((XYAnnotation) anno);
}
final ChartPanel cp = new ChartPanel(chart, collinearChart.getWidth(), collinearChart.getHeight(), collinearChart.getWidth(), collinearChart.getHeight(), collinearChart.getWidth(), collinearChart.getHeight(), ChartPanel.DEFAULT_BUFFER_USED, true, true, true, true, true);
plot.setDataset(0, meanDotSeries);
plot.setRenderer(0, getRenderer1());
plot.setDataset(1, upperQ3Series);
plot.setRenderer(1, getRenderer3());
plot.setDataset(2, lowerQ2Series);
plot.setRenderer(2, getRenderer3());
plot.setDataset(3, boxSeriesE);
plot.setRenderer(3, getRenderer2());
plot.setDataset(4, boxSeriesN);
plot.setRenderer(4, getRenderer2());
plot.setDataset(5, boxSeriesW);
plot.setRenderer(5, getRenderer2());
plot.setDataset(6, boxSeriesS);
plot.setRenderer(6, getRenderer2());
plot.setDataset(7, q2Series);
plot.setRenderer(7, getRenderer2());
plot.setDataset(8, upperBoundSeries);
plot.setRenderer(8, getRenderer2());
plot.setDataset(9, lowerBoundSeries);
plot.setRenderer(9, getRenderer2());
plot.setDataset(10, fillingSeries);
plot.setRenderer(10, getRenderer4());
plot.setDataset(99, lineSeries);
plot.setRenderer(99, getRenderer0());
/**
* XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer(){
* Stroke soild = new BasicStroke(2.0f);
* Stroke dashed = new BasicStroke(1.0f,BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 10.0f, new float[] {10.0f}, 0.0f);
* @Override
* public Stroke getItemStroke(int row, int column) {
* if (row>=N[0]&&row<N[1]){
* return new BasicStroke(stroke*2);
* } else if(row>=N[1]&&row<N[2]) {
* return new BasicStroke(stroke*2);
* } else {
* return new BasicStroke(stroke/2);
* }
* }
* };
*
* //XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
* for(int i=0; i<seriesCollection.getSeriesCount(); i++) {
* if(i>=N[3]) {
* renderer.setSeriesPaint(i, Color.gray);
* } else if(i>=N[2]) {
* renderer.setSeriesPaint(i, Color.decode(hex_str[0]));
* } else if(i>=N[1]) {
* renderer.setSeriesPaint(i, Color.decode(hex_str[0]));
* } else if(i>=N[0]) {
* renderer.setSeriesPaint(i, Color.black);
* } else {
* renderer.setSeriesPaint(i, Color.decode(hex_str[4]));
* renderer.setSeriesShapesVisible(i,true);
* renderer.setSeriesShapesFilled(i,true);
* renderer.setSeriesShape(i, shape);
* }
*
* }
*/
chart.setBackgroundPaint(Color.WHITE);
chart.setBorderPaint(Color.WHITE);
chart.setTitle(title);
cp.setPreferredSize(dim);
cp.setBorder(null);
collinearChart.add(cp);
jframe.add(collinearChart, position);
}
use of org.jfree.chart.plot.XYPlot in project Course_Generator by patrovite.
the class frmEditCurve method CreateChartProfile.
/**
* Creates the chart
* @param dataset Dataset to display
* @return Return a JFreeChart object
*/
private JFreeChart CreateChartProfile(XYDataset dataset) {
JFreeChart chart = ChartFactory.createXYAreaChart("", // "Slope" x axis label
bundle.getString("frmEditCurve.chart.slope"), // "speed" y axis label
bundle.getString("frmEditCurve.chart.speed") + " (" + Utils.uSpeed2String(settings.Unit, settings.isPace) + ")", // data
dataset, // include legend
PlotOrientation.VERTICAL, // include legend
false, // tooltips
true, // urls
false);
// Panel background color
chart.setBackgroundPaint(Color.white);
XYPlot plot = chart.getXYPlot();
plot.setBackgroundPaint(Color.white);
plot.setDomainGridlinePaint(Color.gray);
plot.setRangeGridlinePaint(Color.gray);
// XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
XYAreaRenderer renderer = new XYAreaRenderer();
// Green (safe color)
renderer.setSeriesPaint(0, new Color(0x99, 0xff, 0x00));
renderer.setOutline(true);
// Width of the outline
renderer.setSeriesOutlineStroke(0, new BasicStroke(2.0f));
plot.setRenderer(renderer);
return chart;
}
use of org.jfree.chart.plot.XYPlot in project Course_Generator by patrovite.
the class JPanelAnalysisSpeed method Refresh.
/**
* Update the Time/Distance chart
*/
public void Refresh(TrackData track, CgSettings settings) {
if (track == null)
return;
if (track.data.isEmpty())
return;
this.track = track;
this.settings = settings;
// -- Calculate the speed regression
/*
* y = ax + b a = the slope of the trend line. b = the intercept of the
* trend line.
*/
double xAvg = 0;
double yAvg = 0;
double v = 0;
CgData r;
for (int x = 0; x < track.data.size(); x++) {
r = track.data.get(x);
xAvg += x;
yAvg += (r.getSpeed(settings.Unit) / (100 / r.getDiff())) / (100 / r.getCoeff());
}
xAvg = xAvg / track.data.size();
yAvg = yAvg / track.data.size();
double v1 = 0;
double v2 = 0;
for (int x = 0; x < track.data.size(); x++) {
r = track.data.get(x);
v = (r.getSpeed(settings.Unit) / (100 / r.getDiff())) / (100 / r.getCoeff());
v1 += (x - xAvg) * (v - yAvg);
v2 += Math.pow(x - xAvg, 2);
}
double a = v1 / v2;
double b = yAvg - a * xAvg;
// -- Clear all series
if (datasetSpeedReg.getSeriesCount() > 0)
datasetSpeedReg.removeAllSeries();
if (datasetSpeed.getSeriesCount() > 0)
datasetSpeed.removeAllSeries();
XYPlot plot = chart.getXYPlot();
plot.clearDomainMarkers();
// -- Populate the serie
XYSeries serie1 = new XYSeries("Speed regression/Distance");
XYSeries serie2 = new XYSeries("Speed/Distance");
startSpeed = 0.0;
endSpeed = 0.0;
double maxspeed = 0.0;
double cmpt = 0.0;
for (CgData d : track.data) {
double x = d.getTotal(settings.Unit) / 1000;
double y = d.getSpeed(settings.Unit);
if (x < 0.001)
x = 0;
if (y > maxspeed)
maxspeed = y;
if (cmpt == 0)
startSpeed = (b / (100 / d.getDiff())) / (100 / d.getCoeff());
if (cmpt == track.data.size() - 1)
endSpeed = ((a * x + b) / (100 / d.getDiff())) / (100 / d.getCoeff());
cmpt++;
serie1.add(x, y / (100.0 / d.getDiff()) / (100.0 / d.getCoeff()));
serie2.add(x, a * cmpt + b);
}
// -- If there is no speed the exit (not already calculated)
if (maxspeed == 0.0)
return;
datasetSpeedReg.addSeries(serie2);
datasetSpeed.addSeries(serie1);
ValueAxis axisY = plot.getRangeAxis(0);
axisY.setRange(0.0, Math.ceil(maxspeed / 5.0) * 5.0);
axisY = plot.getRangeAxis(1);
axisY.setRange(0.0, Math.ceil(maxspeed / 5.0) * 5.0);
chart = CreateChart(datasetSpeedReg, datasetSpeed);
RefreshInfo(0);
}
use of org.jfree.chart.plot.XYPlot in project Course_Generator by patrovite.
the class JPanelAnalysisSpeedSlope method Refresh.
/**
* Update the Slope/Speed chart
*/
public void Refresh(TrackData track, CgSettings settings) {
if (track == null)
return;
if (track.data.isEmpty())
return;
this.track = track;
this.settings = settings;
// -- Clear all series
if (datasetSpeedSlopePoint.getSeriesCount() > 0)
datasetSpeedSlopePoint.removeAllSeries();
if (datasetSpeedSlopeLine.getSeriesCount() > 0)
datasetSpeedSlopeLine.removeAllSeries();
XYPlot plot = chart.getXYPlot();
plot.clearDomainMarkers();
// -- Populate the series
XYSeries serie1 = new XYSeries("Speed/Slope (points)");
XYSeries serie2 = new XYSeries("Speed/Slope (line)");
int[] nb;
int j = 0;
double[] fCurveSpeedSlope = new double[101];
double[] fCurveSpeedSlope2 = new double[101];
Double[] Average = new Double[101];
Double[] Variance = new Double[101];
Double[] StandardDeviation = new Double[101];
nb = new int[101];
// -- init calc
for (j = 0; j < 101; j++) {
fCurveSpeedSlope[j] = 0;
fCurveSpeedSlope2[j] = 0;
nb[j] = 0;
}
// -- Execute the speed filtering calculation
SpeedFilter();
/*
* -- Pass 1 We calculate the average, variance and standard deviation
* of each area (1% per area)
*/
int n = 0;
double s = 0.0;
double coeff = 0.0;
double diff = 0.0;
for (CgData r : track.data) {
if (btSpeedSlopeFilter.isSelected())
s = r.tmp1;
else
s = r.getSpeed(settings.Unit);
if (btSpeedSlopeCorr.isSelected()) {
coeff = r.getCoeff() / 100.0;
diff = r.getDiff() / 100.0;
} else {
coeff = 1.00;
diff = 1.00;
}
if (s > 1.5) {
if (r.getSlope() < -49) {
fCurveSpeedSlope[0] = fCurveSpeedSlope[0] + (s / coeff / diff);
fCurveSpeedSlope2[0] = fCurveSpeedSlope2[0] + Math.pow((s / coeff / diff), 2);
nb[0]++;
} else if (r.getSlope() > 49) {
fCurveSpeedSlope[100] = fCurveSpeedSlope[100] + (s / coeff / diff);
fCurveSpeedSlope2[100] = fCurveSpeedSlope2[100] + Math.pow((s / coeff / diff), 2);
nb[100]++;
} else {
n = (int) Math.floor(r.getSlope());
fCurveSpeedSlope[n + 50] = fCurveSpeedSlope[n + 50] + (s / coeff / diff);
fCurveSpeedSlope2[n + 50] = fCurveSpeedSlope2[n + 50] + Math.pow((s / coeff / diff), 2);
nb[n + 50]++;
}
}
}
for (j = 0; j < 101; j++) {
if ((nb[j] > 0)) {
Average[j] = fCurveSpeedSlope[j] / nb[j];
Variance[j] = fCurveSpeedSlope2[j] / nb[j] - Average[j] * Average[j];
StandardDeviation[j] = Math.sqrt(Variance[j]);
}
}
// -- Init calc
for (j = 0; j < 101; j++) {
fCurveSpeedSlope[j] = 0;
fCurveSpeedSlope2[j] = 0;
nb[j] = 0;
}
n = 0;
s = 0.0;
coeff = 0.0;
diff = 0.0;
for (CgData r : track.data) {
{
if (btSpeedSlopeFilter.isSelected())
s = r.tmp1;
else
s = r.getSpeed(settings.Unit);
if (btSpeedSlopeCorr.isSelected()) {
coeff = r.getCoeff() / 100.0;
diff = r.getDiff() / 100.0;
} else {
coeff = 1.00;
diff = 1.00;
}
if (s > 1.5) {
if (r.getSlope() < -49) {
if ((s <= Average[0] + StandardDeviation[0]) || (s >= Average[0] - StandardDeviation[0])) {
fCurveSpeedSlope[0] = fCurveSpeedSlope[0] + (s / coeff / diff);
fCurveSpeedSlope2[0] = fCurveSpeedSlope2[0] + Math.pow((s / coeff / diff), 2);
nb[0]++;
}
} else if (r.getSlope() > 49) {
if ((s <= Average[100] + StandardDeviation[100]) || (s >= Average[100] - StandardDeviation[100])) {
fCurveSpeedSlope[100] = fCurveSpeedSlope[100] + (s / coeff / diff);
fCurveSpeedSlope2[100] = fCurveSpeedSlope2[100] + Math.pow((s / coeff / diff), 2);
nb[100]++;
}
} else {
n = (int) Math.floor(r.getSlope());
if ((s <= Average[n + 50] + StandardDeviation[n + 50]) || (s >= Average[n + 50] - StandardDeviation[n + 50])) {
fCurveSpeedSlope[n + 50] = fCurveSpeedSlope[n + 50] + (s / coeff / diff);
fCurveSpeedSlope2[n + 50] = fCurveSpeedSlope2[n + 50] + Math.pow((s / coeff / diff), 2);
nb[n + 50]++;
}
}
}
}
}
double maxspeed = 0.0;
// -- Populate the first serie
for (CgData r : track.data) {
if (btSpeedSlopeFilter.isSelected())
s = r.tmp1;
else
s = r.getSpeed(settings.Unit);
if (s > maxspeed)
maxspeed = s;
serie1.add(r.getSlope(), s);
}
datasetSpeedSlopePoint.addSeries(serie1);
// -- Populate the second serie
double m = 0.0;
for (j = 0; j < 101; j++) {
if ((nb[j] > 0)) {
m = fCurveSpeedSlope[j] / nb[j];
if (m > maxspeed)
maxspeed = m;
serie2.add(j - 50, m);
}
}
// -- If there is no speed the exit (not already calculated)
if (maxspeed == 0)
return;
datasetSpeedSlopeLine.addSeries(serie2);
// -- Set the range of the X axis
ValueAxis axisX = plot.getDomainAxis();
axisX.setRange(-50.0, 50.0);
ValueAxis axisY = plot.getRangeAxis(0);
axisY.setRange(0, Math.ceil(maxspeed / 5.0) * 5.0);
axisY = plot.getRangeAxis(1);
axisY.setRange(1, Math.ceil(maxspeed / 5.0) * 5.0);
}
Aggregations