Skip to content
Snippets Groups Projects
Commit ebc75d7a authored by Tim Molter's avatar Tim Molter
Browse files

Issue #124 - New Stick chart series render type

parent 0e3d2338
Branches
No related tags found
No related merge requests found
......@@ -69,6 +69,7 @@ import org.knowm.xchart.demo.charts.scatter.ScatterChart01;
import org.knowm.xchart.demo.charts.scatter.ScatterChart02;
import org.knowm.xchart.demo.charts.scatter.ScatterChart03;
import org.knowm.xchart.demo.charts.scatter.ScatterChart04;
import org.knowm.xchart.demo.charts.stick.StickChart01;
import org.knowm.xchart.demo.charts.theme.ThemeChart01;
import org.knowm.xchart.demo.charts.theme.ThemeChart02;
import org.knowm.xchart.demo.charts.theme.ThemeChart03;
......@@ -307,6 +308,13 @@ public class XChartDemo extends JPanel implements TreeSelectionListener {
defaultMutableTreeNode = new DefaultMutableTreeNode(new ChartInfo("BarChart09 - Category chart with Bar, Line and Scatter Series", new BarChart09().getChart()));
category.add(defaultMutableTreeNode);
// Stick category
category = new DefaultMutableTreeNode("Stick Charts");
top.add(category);
defaultMutableTreeNode = new DefaultMutableTreeNode(new ChartInfo("StickChart01 - Stick", new StickChart01().getChart()));
category.add(defaultMutableTreeNode);
// Theme category
category = new DefaultMutableTreeNode("Chart Themes");
top.add(category);
......
/**
* Copyright 2013 Xeiam LLC.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.knowm.xchart.demo.charts.stick;
import java.util.ArrayList;
import java.util.List;
import org.knowm.xchart.ChartBuilder_Category;
import org.knowm.xchart.Chart_Category;
import org.knowm.xchart.Series_Category.ChartCategorySeriesRenderStyle;
import org.knowm.xchart.SwingWrapper;
import org.knowm.xchart.demo.charts.ExampleChart;
import org.knowm.xchart.internal.chartpart.Chart;
import org.knowm.xchart.internal.style.Styler.LegendPosition;
/**
* Stick Chart
* <p>
* Demonstrates the following:
* <ul>
* <li>Stick category series render type
*/
public class StickChart01 implements ExampleChart {
public static void main(String[] args) {
ExampleChart exampleChart = new StickChart01();
Chart chart = exampleChart.getChart();
new SwingWrapper(chart).displayChart();
}
@Override
public Chart getChart() {
// generates Log data
List<Integer> xData = new ArrayList<Integer>();
List<Integer> yData = new ArrayList<Integer>();
for (int i = -3; i <= 24; i++) {
xData.add(i);
yData.add(i);
}
// Create Chart
Chart_Category chart = new ChartBuilder_Category().width(800).height(600).title("Stick").build();
// Customize Chart
chart.getStyler().setChartTitleVisible(true);
chart.getStyler().setLegendPosition(LegendPosition.InsideNW);
chart.getStyler().setChartCategorySeriesRenderStyle(ChartCategorySeriesRenderStyle.Stick);
// Series
chart.addSeries("data", xData, yData);
return chart;
}
}
\ No newline at end of file
......@@ -20,13 +20,13 @@ import java.util.Date;
import java.util.Iterator;
import java.util.List;
import org.knowm.xchart.internal.chartpart.Axis.AxisDataType;
import org.knowm.xchart.internal.Series_AxesChart;
import org.knowm.xchart.internal.chartpart.Axis.AxisDataType;
import org.knowm.xchart.internal.chartpart.RenderableSeries;
import org.knowm.xchart.internal.chartpart.RenderableSeries.LegendRenderType;
/**
* A Series containing X and Y data to be plotted on a Chart
* A Series containing category data to be plotted on a Chart
*
* @author timmolter
*/
......@@ -34,7 +34,15 @@ public class Series_Category extends Series_AxesChart {
public enum ChartCategorySeriesRenderStyle implements RenderableSeries {
Line(LegendRenderType.Line), Area(LegendRenderType.Line), Scatter(LegendRenderType.Scatter), Bar(LegendRenderType.Box);
Line(LegendRenderType.Line),
Area(LegendRenderType.Line),
Scatter(LegendRenderType.Scatter),
Bar(LegendRenderType.Box),
Stick(LegendRenderType.Line);
private final LegendRenderType legendRenderType;
......
......@@ -39,7 +39,7 @@ public class Styler_Category extends Styler_AxesChart {
@Override
protected void setAllStyles() {
chartCategorySeriesRenderStyle = ChartCategorySeriesRenderStyle.Bar; // set default to bar
this.chartCategorySeriesRenderStyle = ChartCategorySeriesRenderStyle.Bar; // set default to bar
}
public ChartCategorySeriesRenderStyle getChartCategorySeriesRenderStyle() {
......@@ -48,9 +48,9 @@ public class Styler_Category extends Styler_AxesChart {
}
/**
* Sets the default series render style for the chart (line, scatter, area, etc.) You can override the series render style individually on each Series object.
* Sets the default series render style for the chart (bar, stick, line, scatter, area, etc.) You can override the series render style individually on each Series object.
*
* @param chartXYSeriesRenderStyle
* @param chartCategorySeriesRenderStyle
*/
public void setChartCategorySeriesRenderStyle(ChartCategorySeriesRenderStyle chartCategorySeriesRenderStyle) {
......
......@@ -43,7 +43,7 @@ public class PlotContent_Category_Bar<ST extends Styler, S extends Series> exten
/**
* Constructor
*
* @param plot
* @param chart
*/
protected PlotContent_Category_Bar(Chart<Styler_Category, Series_Category> chart) {
......@@ -173,13 +173,23 @@ public class PlotContent_Category_Bar<ST extends Styler, S extends Series> exten
double barWidthPercentage = stylerCategory.getBarWidthPercentage();
barWidth = gridStep * barWidthPercentage;
double barMargin = gridStep * (1 - barWidthPercentage) / 2;
xOffset = bounds.getX() + xLeftMargin + gridStep * categoryCounter++ + barMargin;
if (ChartCategorySeriesRenderStyle.Stick.equals(series.getChartCategorySeriesRenderStyle())) {
xOffset = bounds.getX() + xLeftMargin + categoryCounter++ * gridStep + gridStep / 2;
}
else {
xOffset = bounds.getX() + xLeftMargin + gridStep * categoryCounter++ + barMargin;
}
}
else {
double barWidthPercentage = stylerCategory.getBarWidthPercentage();
barWidth = gridStep / chart.getSeriesMap().size() * barWidthPercentage;
double barMargin = gridStep * (1 - barWidthPercentage) / 2;
xOffset = bounds.getX() + xLeftMargin + gridStep * categoryCounter++ + seriesCounter * barWidth + barMargin;
if (ChartCategorySeriesRenderStyle.Stick.equals(series.getChartCategorySeriesRenderStyle())) {
xOffset = bounds.getX() + xLeftMargin + categoryCounter++ * gridStep + seriesCounter * barMargin + gridStep / chart.getSeriesMap().size() / 2;
}
else {
xOffset = bounds.getX() + xLeftMargin + gridStep * categoryCounter++ + seriesCounter * barWidth + barMargin;
}
}
// paint series
......@@ -200,6 +210,29 @@ public class PlotContent_Category_Bar<ST extends Styler, S extends Series> exten
g.draw(path);
}
}
else if (ChartCategorySeriesRenderStyle.Stick.equals(series.getChartCategorySeriesRenderStyle())) {
// paint line
if (series.getLineStyle() != SeriesLines.NONE) {
g.setColor(series.getLineColor());
g.setStroke(series.getLineStyle());
Shape line = new Line2D.Double(xOffset, zeroOffset, xOffset, yOffset);
g.draw(line);
}
// paint marker
if (series.getMarker() != null) {
g.setColor(series.getMarkerColor());
if (y <= 0) {
series.getMarker().paint(g, xOffset, zeroOffset, stylerCategory.getMarkerSize());
}
else {
series.getMarker().paint(g, xOffset, yOffset, stylerCategory.getMarkerSize());
}
}
}
else {
// paint line
......
......@@ -48,7 +48,7 @@ public class PlotContent_Category_Line_Area_Scatter<ST extends Styler, S extends
protected PlotContent_Category_Line_Area_Scatter(Chart<Styler_Category, Series_Category> chart) {
super(chart);
this.stylerCategory = stylerCategory;
this.stylerCategory = chart.getStyler();
}
@Override
......@@ -106,13 +106,15 @@ public class PlotContent_Category_Line_Area_Scatter<ST extends Styler, S extends
yMin = Math.log10(yMin);
yMax = Math.log10(yMax);
}
System.out.println("yMin = " + yMin);
System.out.println("yMax = " + yMax);
Map<String, Series_Category> map = chart.getSeriesMap();
Map<String, Series_Category> seriesMap = chart.getSeriesMap();
int numCategories = map.size();
int numCategories = seriesMap.values().iterator().next().getXData().size();
double gridStep = xTickSpace / numCategories;
for (Series_Category series : map.values()) {
for (Series_Category series : seriesMap.values()) {
// data points
Collection<? extends Number> yData = series.getYData();
......@@ -154,7 +156,7 @@ public class PlotContent_Category_Line_Area_Scatter<ST extends Styler, S extends
else {
y = yOrig;
}
// System.out.println(y);
System.out.println(y);
double yTransform = bounds.getHeight() - (yTopMargin + (y - yMin) / (yMax - yMin) * yTickSpace);
......@@ -165,11 +167,10 @@ public class PlotContent_Category_Line_Area_Scatter<ST extends Styler, S extends
double xOffset = bounds.getX() + xLeftMargin + categoryCounter++ * gridStep + gridStep / 2;
double yOffset = bounds.getY() + yTransform;
// System.out.println(xTransform);
// System.out.println(xOffset);
// System.out.println(yTransform);
// System.out.println(yOffset);
// System.out.println("---");
System.out.println(xOffset);
System.out.println(yTransform);
System.out.println(yOffset);
System.out.println("---");
// paint line
if (ChartCategorySeriesRenderStyle.Line.equals(series.getChartCategorySeriesRenderStyle()) || ChartCategorySeriesRenderStyle.Area.equals(series.getChartCategorySeriesRenderStyle())) {
......@@ -205,6 +206,21 @@ public class PlotContent_Category_Line_Area_Scatter<ST extends Styler, S extends
}
}
// paint stick
if (ChartCategorySeriesRenderStyle.Stick.equals(series.getChartCategorySeriesRenderStyle())) {
if (series.getLineStyle() != SeriesLines.NONE) {
double yBottomOfArea = bounds.getY() + bounds.getHeight() - yTopMargin;
g.setColor(series.getLineColor());
g.setStroke(series.getLineStyle());
Shape line = new Line2D.Double(xOffset, yBottomOfArea, xOffset, yOffset);
g.draw(line);
}
}
previousX = xOffset;
previousY = yOffset;
......
......@@ -16,17 +16,21 @@
*/
package org.knowm.xchart.internal.chartpart;
import java.awt.Graphics2D;
import org.knowm.xchart.Series_Category;
import org.knowm.xchart.Series_Category.ChartCategorySeriesRenderStyle;
import org.knowm.xchart.Styler_Category;
import org.knowm.xchart.internal.Series;
import org.knowm.xchart.internal.style.Styler_AxesChart;
import org.knowm.xchart.Styler_Category;
/**
* @author timmolter
*/
public class Plot_Category<ST extends Styler_AxesChart, S extends Series> extends Plot_AxesChart {
Styler_Category stylerCategory;
/**
* Constructor
*
......@@ -35,19 +39,22 @@ public class Plot_Category<ST extends Styler_AxesChart, S extends Series> extend
public Plot_Category(Chart<Styler_Category, Series_Category> chart) {
super(chart);
stylerCategory = chart.getStyler();
}
Styler_Category stylerCategory = chart.getStyler();
@Override
public void paint(Graphics2D g) {
if (ChartCategorySeriesRenderStyle.Bar.equals(stylerCategory.getChartCategorySeriesRenderStyle())) {
if (ChartCategorySeriesRenderStyle.Bar.equals(stylerCategory.getChartCategorySeriesRenderStyle()) || ChartCategorySeriesRenderStyle.Stick.equals(stylerCategory
.getChartCategorySeriesRenderStyle())) {
this.plotContent = new PlotContent_Category_Bar<Styler_Category, Series_Category>(chart);
}
else {
this.plotContent = new PlotContent_Category_Line_Area_Scatter<Styler_Category, Series_Category>(chart);
}
super.paint(g);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment