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

Merge pull request #90 from cardillo/develop

Allow tilting of X-Axis labels
parents 60b3fb80 a4e441c9
No related branches found
No related tags found
No related merge requests found
......@@ -49,6 +49,7 @@ import com.xeiam.xchart.demo.charts.date.DateChart04;
import com.xeiam.xchart.demo.charts.date.DateChart05;
import com.xeiam.xchart.demo.charts.date.DateChart06;
import com.xeiam.xchart.demo.charts.date.DateChart07;
import com.xeiam.xchart.demo.charts.date.DateChart08;
import com.xeiam.xchart.demo.charts.line.LineChart01;
import com.xeiam.xchart.demo.charts.line.LineChart02;
import com.xeiam.xchart.demo.charts.line.LineChart03;
......@@ -303,6 +304,9 @@ public class XChartDemo extends JPanel implements TreeSelectionListener {
defaultMutableTreeNode = new DefaultMutableTreeNode(new ChartInfo("DateChart07 - Year Scale", new DateChart07().getChart()));
category.add(defaultMutableTreeNode);
defaultMutableTreeNode = new DefaultMutableTreeNode(new ChartInfo("DateChart08 - Rotated Labels", new DateChart08().getChart()));
category.add(defaultMutableTreeNode);
// Real-time category
category = new DefaultMutableTreeNode("Real-time Charts");
top.add(category);
......
/**
* Copyright 2011 - 2015 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 com.xeiam.xchart.demo.charts.date;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random;
import com.xeiam.xchart.Chart;
import com.xeiam.xchart.ChartBuilder;
import com.xeiam.xchart.StyleManager.TextAlignment;
import com.xeiam.xchart.SwingWrapper;
import com.xeiam.xchart.demo.charts.ExampleChart;
/**
* Year scale
*/
public class DateChart08 implements ExampleChart {
public static void main(String[] args) {
ExampleChart exampleChart = new DateChart08();
Chart chart = exampleChart.getChart();
new SwingWrapper(chart).displayChart();
}
@Override
public Chart getChart() {
// Create Chart
Chart chart = new ChartBuilder().width(800).height(600).title("Year Scale").build();
chart.getStyleManager().setLegendVisible(false);
chart.getStyleManager().setXAxisLabelRotation(45);
chart.getStyleManager().setYAxisLabelRotation(90);
chart.getStyleManager().setXAxisLabelAlignment(TextAlignment.Right);
chart.getStyleManager().setDatePattern("yyyy-MM-dd");
// generate data
List<Date> xData = new ArrayList<Date>();
List<Double> yData = new ArrayList<Double>();
Random random = new Random();
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
for (int i = 1; i <= 14; i++) {
try {
date = sdf.parse("" + (2001 + i) + "-" + random.nextInt(12) + "-" + random.nextInt(28));
} catch (ParseException e) {
e.printStackTrace();
}
xData.add(date);
yData.add(Math.random() * i);
}
chart.addSeries("blah", xData, yData);
return chart;
}
}
......@@ -123,6 +123,8 @@ public class StyleManager {
private double axisTickSpacePercentage;
private TextAlignment xAxisLabelAlignment = TextAlignment.Centre;
private TextAlignment yAxisLabelAlignment = TextAlignment.Left;
private int xAxisLabelRotation = 0;
private int yAxisLabelRotation = 0;
// Chart Plot Area ///////////////////////////////
private boolean isPlotGridLinesVisible;
......@@ -906,6 +908,26 @@ public class StyleManager {
this.yAxisLabelAlignment = yAxisLabelAlignment;
}
public int getXAxisLabelRotation() {
return xAxisLabelRotation;
}
public void setXAxisLabelRotation(int xAxisLabelRotation) {
this.xAxisLabelRotation = xAxisLabelRotation;
}
public int getYAxisLabelRotation() {
return yAxisLabelRotation;
}
public void setYAxisLabelRotation(int yAxisLabelRotation) {
this.yAxisLabelRotation = yAxisLabelRotation;
}
// Chart Plot Area ///////////////////////////////
/**
......
......@@ -16,9 +16,13 @@
package com.xeiam.xchart.internal.chartpart;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.font.FontRenderContext;
import java.awt.font.TextLayout;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.xeiam.xchart.StyleManager.LegendPosition;
......@@ -143,8 +147,13 @@ public class Axis implements ChartPart {
// Axis tick labels
double axisTickLabelsHeight = 0.0;
if (getChartPainter().getStyleManager().isXAxisTicksVisible()) {
TextLayout textLayout = new TextLayout("0", getChartPainter().getStyleManager().getAxisTickLabelsFont(), new FontRenderContext(null, true, false));
Rectangle2D rectangle = textLayout.getBounds();
String tickLabel = getChartPainter().getAxisPair().getXAxis().getAxisType().equals(AxisType.Date) ?
new SimpleDateFormat(getChartPainter().getStyleManager().getDatePattern()).format(new Date()) : "0";
TextLayout textLayout = new TextLayout(tickLabel, getChartPainter().getStyleManager().getAxisTickLabelsFont(), new FontRenderContext(null, true, false));
AffineTransform rot = getChartPainter().getStyleManager().getXAxisLabelRotation() == 0 ? null :
AffineTransform.getRotateInstance(-Math.toRadians(getChartPainter().getStyleManager().getXAxisLabelRotation()));
Shape shape = textLayout.getOutline(rot);
Rectangle2D rectangle = shape.getBounds();
axisTickLabelsHeight = rectangle.getHeight() + getChartPainter().getStyleManager().getAxisTickPadding() + getChartPainter().getStyleManager().getAxisTickMarkLength();
}
return titleHeight + axisTickLabelsHeight;
......
......@@ -88,8 +88,10 @@ public class AxisTickLabels implements ChartPart {
for (Double tickLocation : axisLabelTextLayouts.keySet()) {
TextLayout axisLabelTextLayout = axisLabelTextLayouts.get(tickLocation);
Rectangle2D tickLabelBounds = axisLabelTextLayout.getBounds();
Shape shape = axisLabelTextLayout.getOutline(null);
AffineTransform rot = getChartPainter().getStyleManager().getYAxisLabelRotation() == 0 ? null :
AffineTransform.getRotateInstance(-Math.toRadians(getChartPainter().getStyleManager().getYAxisLabelRotation()));
Shape shape = axisLabelTextLayout.getOutline(rot);
Rectangle2D tickLabelBounds = shape.getBounds();
double flippedTickLocation = yOffset + height - tickLocation;
......@@ -142,7 +144,9 @@ public class AxisTickLabels implements ChartPart {
TextLayout textLayout = new TextLayout(tickLabel, getChartPainter().getStyleManager().getAxisTickLabelsFont(), frc);
// Shape shape = v.getOutline();
Shape shape = textLayout.getOutline(null);
AffineTransform rot = getChartPainter().getStyleManager().getXAxisLabelRotation() == 0 ? null :
AffineTransform.getRotateInstance(-Math.toRadians(getChartPainter().getStyleManager().getXAxisLabelRotation()));
Shape shape = textLayout.getOutline(rot);
Rectangle2D tickLabelBounds = shape.getBounds2D();
AffineTransform orig = g.getTransform();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment