/** * @param forecast * @param settings (next days) * @return */ public JFreeChart createBarChart( final LiquidityForecast forecast, final LiquidityForecastSettings settings) { Validate.isTrue(settings.getNextDays() > 0 && settings.getNextDays() < 500); final LiquidityForecastCashFlow cashFlow = new LiquidityForecastCashFlow(forecast, settings.getNextDays()); final TimeSeries accumulatedSeriesExpected = new TimeSeries(I18n.getString("plugins.liquidityplanning.forecast.expected")); final TimeSeries creditSeries = new TimeSeries(I18n.getString("plugins.liquidityplanning.common.credit")); final TimeSeries debitSeries = new TimeSeries(I18n.getString("plugins.liquidityplanning.common.debit")); double accumulatedExpected = settings.getStartAmount().doubleValue(); final DayHolder dh = new DayHolder(); final Date lower = dh.getDate(); for (int i = 0; i < settings.getNextDays(); i++) { final Day day = new Day(dh.getDayOfMonth(), dh.getMonth() + 1, dh.getYear()); if (i > 0) { accumulatedExpected += cashFlow.getDebitsExpected()[i - 1].doubleValue() + cashFlow.getCreditsExpected()[i - 1].doubleValue(); } accumulatedSeriesExpected.add(day, accumulatedExpected); creditSeries.add(day, cashFlow.getCreditsExpected()[i].doubleValue()); debitSeries.add(day, cashFlow.getDebitsExpected()[i].doubleValue()); dh.add(Calendar.DATE, 1); } dh.add(Calendar.DATE, -1); final XYChartBuilder cb = new XYChartBuilder( ChartFactory.createXYBarChart( null, null, false, null, null, PlotOrientation.VERTICAL, false, false, false)); int counter = 0; final TimeSeriesCollection xyDataSeries = new TimeSeriesCollection(); xyDataSeries.addSeries(accumulatedSeriesExpected); final XYLineAndShapeRenderer lineRenderer = new XYLineAndShapeRenderer(true, true); lineRenderer.setSeriesPaint(0, cb.getRedMarker()); lineRenderer.setSeriesVisibleInLegend(0, true); cb.setRenderer(counter, lineRenderer) .setDataset(counter++, xyDataSeries) .setStrongStyle(lineRenderer, false, accumulatedSeriesExpected); final TimeSeriesCollection cashflowSet = new TimeSeriesCollection(); cashflowSet.addSeries(debitSeries); cashflowSet.addSeries(creditSeries); final XYBarRenderer barRenderer = new XYBarRenderer(.2); barRenderer.setSeriesPaint(0, cb.getGreenFill()); barRenderer.setSeriesPaint(1, cb.getRedFill()); barRenderer.setShadowVisible(false); cb.setRenderer(counter, barRenderer).setDataset(counter++, cashflowSet); cb.setDateXAxis(true).setDateXAxisRange(lower, dh.getDate()).setYAxis(true, null); return cb.getChart(); }
/** * Creates the histogram chart. * * @param exampleSet * @return */ private JFreeChart createHistogramChart(final ExampleSet exampleSet) { JFreeChart chart = ChartFactory.createHistogram( null, null, null, createHistogramDataset(exampleSet), PlotOrientation.VERTICAL, false, false, false); AbstractAttributeStatisticsModel.setDefaultChartFonts(chart); chart.setBackgroundPaint(null); chart.setBackgroundImageAlpha(0.0f); XYPlot plot = (XYPlot) chart.getPlot(); plot.setRangeGridlinesVisible(false); plot.setDomainGridlinesVisible(false); plot.setOutlineVisible(false); plot.setRangeZeroBaselineVisible(false); plot.setDomainZeroBaselineVisible(false); plot.getDomainAxis().setTickLabelsVisible(false); plot.setBackgroundPaint(COLOR_INVISIBLE); plot.setBackgroundImageAlpha(0.0f); XYBarRenderer renderer = (XYBarRenderer) plot.getRenderer(); renderer.setSeriesPaint(0, AttributeGuiTools.getColorForValueType(Ontology.DATE_TIME)); renderer.setBarPainter(new StandardXYBarPainter()); renderer.setDrawBarOutline(true); renderer.setShadowVisible(false); return chart; }
private static void configureXYBarRenderer( XYBarRenderer renderer, ValueSource valueSource, PlotInstance plotInstance) { StandardXYBarPainter barPainter = new StandardXYBarPainter(); renderer.setBarPainter(barPainter); renderer.setGradientPaintTransformer(null); SeriesFormat seriesFormat = valueSource.getSeriesFormat(); DimensionConfig domainConfig = valueSource.getDomainConfig(); ValueSourceData valueSourceData = plotInstance.getPlotData().getValueSourceData(valueSource); int seriesCount; if (valueSourceData != null) { seriesCount = valueSourceData.getSeriesCount(); } else { seriesCount = 0; } DimensionConfig colorDimensionConfig = plotInstance.getCurrentPlotConfigurationClone().getDimensionConfig(PlotDimension.COLOR); // don't need shapeDimensionConfig, since the shape can't be represented for bars. // Loop all series and set series format. // Format based on dimension configs will be set later on in initFormatDelegate(). for (int seriesIdx = 0; seriesIdx < seriesCount; ++seriesIdx) { // configure series paint if necessary if (!SeriesFormat.calculateIndividualFormatForEachItem(domainConfig, colorDimensionConfig)) { renderer.setSeriesPaint(seriesIdx, seriesFormat.getAreaFillPaint()); } // configure general style of the bars renderer.setShadowVisible(false); renderer.setSeriesOutlinePaint(seriesIdx, PlotConfiguration.DEFAULT_SERIES_OUTLINE_PAINT); } renderer.setDrawBarOutline(true); }
private void createUI() { dataset = new XIntervalSeriesCollection(); chart = ChartFactory.createHistogram( CHART_TITLE, "Values", "Frequency in #pixels", dataset, PlotOrientation.VERTICAL, false, // Legend? true, // tooltips false // url ); final XYPlot xyPlot = chart.getXYPlot(); xyPlot.setDomainZeroBaselineStroke(new BasicStroke(0.2f)); final XYBarRenderer renderer = (XYBarRenderer) xyPlot.getRenderer(); renderer.setDrawBarOutline(false); renderer.setShadowVisible(false); renderer.setShadowYOffset(-4.0); renderer.setBaseToolTipGenerator(new XYPlotToolTipGenerator()); renderer.setBarPainter(new StandardXYBarPainter()); renderer.setSeriesPaint(0, new Color(0, 0, 200)); createUI(createChartPanel(chart), createOptionsPanel(), bindingContext); isInitialized = true; final Binding minBinding = xAxisRangeControl.getBindingContext().getBinding("min"); final double min = (Double) minBinding.getPropertyValue(); final Binding maxBinding = xAxisRangeControl.getBindingContext().getBinding("max"); final double max = (Double) maxBinding.getPropertyValue(); if (!histogramComputing && min > max) { minBinding.setPropertyValue(max); maxBinding.setPropertyValue(min); } updateXAxis(); }
public static JFreeChart createChartZhu(IntervalXYDataset dataset) { JFreeChart chart = ChartFactory.createXYBarChart( "时间段内车辆出入统计柱形图", // title "数据日期从" + min + "到" + max, true, // x-axis label "车辆出入数量", // y-axis label dataset, PlotOrientation.VERTICAL, // data true, // create legend? true, // generate tooltips? false // generate URLs? ); chart.setBackgroundPaint(Color.white); chart.getTitle().setFont(new Font("宋体", Font.BOLD, 15)); // chart.getCategoryPlot().getDomainAxis().setCategoryLabelPositions(CategoryLabelPositions.UP_45); XYPlot plot2 = (XYPlot) chart.getPlot(); plot2.setBackgroundPaint(Color.lightGray); plot2.setDomainGridlinePaint(Color.white); plot2.setRangeGridlinePaint(Color.white); plot2.setAxisOffset(new RectangleInsets(5.0, 5.0, 5.0, 5.0)); // 设定坐标轴与图表数据显示部分距离 plot2.setDomainCrosshairVisible(true); plot2.setRangeCrosshairVisible(true); plot2.getRangeAxis().setLabelFont(new Font("宋体", Font.BOLD, 15)); // 横轴框里的标题字体 chart.getLegend().setItemFont(new Font("宋体", Font.ITALIC, 10)); // 横轴列表字体 plot2.getDomainAxis().setTickLabelFont(new Font("新宋体", 1, 10)); // 横轴小标题字体 plot2.getDomainAxis().setLabelFont(new Font("新宋体", 1, 10)); plot2.setNoDataMessage("没有数据"); plot2.setBackgroundAlpha(0.5f); XYBarRenderer xyBarRender = new XYBarRenderer(); xyBarRender.setMargin(0.5); // 设置柱形图之间的间隔 GradientPaint gradientpaint1 = new GradientPaint(0.0F, 0.0F, Color.black, 0.0F, 0.0F, new Color(0, 0, 64)); GradientPaint gradientpaint3 = new GradientPaint(0.0F, 0.0F, Color.red, 0.0F, 0.0F, new Color(64, 0, 0)); xyBarRender.setSeriesPaint(0, gradientpaint1); xyBarRender.setSeriesPaint(1, gradientpaint3); xyBarRender.setSeriesVisibleInLegend(1, true, true); xyBarRender.setBarAlignmentFactor(0.5); xyBarRender.setDrawBarOutline(false); xyBarRender.setSeriesStroke( 0, new BasicStroke( 2.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND, 1.0f, new float[] {10.0f, 6.0f}, 0.0f)); xyBarRender.setSeriesStroke( 1, new BasicStroke( 5.0f, BasicStroke.CAP_SQUARE, BasicStroke.JOIN_ROUND, 5.0f, new float[] {15.0f, 10.0f}, 10.0f)); plot2.setRenderer(xyBarRender); ClusteredXYBarRenderer clusteredxybarrenderer = new ClusteredXYBarRenderer(0.001D, false); plot2.setRenderer(clusteredxybarrenderer); // CategoryAxis横抽,通过getDomainAxis取得,NumberAxis纵轴,通过getRangeAxis取得。 DateAxis axis = (DateAxis) plot2.getDomainAxis(); // axis.setDateFormatOverride(new SimpleDateFormat("yyyy-MM-dd")); if (type == 0) // type = 0则以1天为横轴最小坐标,为1则以1月为横轴最小坐标 { axis.setDateFormatOverride(new SimpleDateFormat("dd")); // 设置时间格式 axis.setTickUnit(new DateTickUnit(DateTickUnit.DAY, 1)); } else { axis.setDateFormatOverride(new SimpleDateFormat("yyyy-MM")); axis.setTickUnit(new DateTickUnit(DateTickUnit.MONTH, 1)); } axis.setLabelFont(new Font("黑体", Font.TRUETYPE_FONT, 12)); // axis.setLabelAngle(0.85); axis.setAutoTickUnitSelection(false); // 时间轴的数据标签是否自动确 // ItemLabelPosition itemlabelposition = new // ItemLabelPosition(ItemLabelAnchor.INSIDE12,TextAnchor.CENTER_RIGHT,TextAnchor.CENTER_RIGHT, // -1.57D); // 下面这一块是用来设置轴的时间间隔的,可能会出现,出错时可以简单设处日期就行了 // 设置X轴间隔的另一种方法更好不出错 int a = 1; a = (int) (daycount / 10) + 1; // axis.setTickUnit(new DateTickUnit(DateTickUnit.DAY,a)); // axis.setLabelAngle(0.45); // axis.setLabelInsets(, true); NumberAxis numberaxis = (NumberAxis) plot2.getRangeAxis(); numberaxis.setAxisLineVisible(false); // 是否显示纵坐标 numberaxis.setTickMarksVisible(false); // 是否显示坐标标尺 numberaxis.setAutoRangeIncludesZero(false); // 是否自动包含0起点? 默认为true numberaxis.setAutoTickUnitSelection(false); // 数据轴的数据标签是否自动确定 int space_y = (int) ((highValue_Y * 1.1 - minValue_Y * 0.9) / 10); if (space_y == 0) space_y = 1; System.out.println("spacespace sapce space" + space_y); numberaxis.setTickUnit(new NumberTickUnit(space_y)); // 设置刻度显示的密度 numberaxis.setAutoRangeMinimumSize(2D); return chart; }
/** * Creates an overlaid chart. * * @return The chart. */ private static JFreeChart createCombinedChart() { // create plot ... IntervalXYDataset data1 = createDataset1(); XYItemRenderer renderer1 = new XYLineAndShapeRenderer(true, false); renderer1.setBaseToolTipGenerator( new StandardXYToolTipGenerator( StandardXYToolTipGenerator.DEFAULT_TOOL_TIP_FORMAT, new SimpleDateFormat("d-MMM-yyyy"), new DecimalFormat("0.00"))); renderer1.setSeriesStroke( 0, new BasicStroke(4.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL)); renderer1.setSeriesPaint(0, Color.blue); DateAxis domainAxis = new DateAxis("Year"); domainAxis.setLowerMargin(0.0); domainAxis.setUpperMargin(0.02); ValueAxis rangeAxis = new NumberAxis("$billion"); XYPlot plot1 = new XYPlot(data1, null, rangeAxis, renderer1); plot1.setBackgroundPaint(Color.lightGray); plot1.setDomainGridlinePaint(Color.white); plot1.setRangeGridlinePaint(Color.white); // add a second dataset and renderer... IntervalXYDataset data2 = createDataset2(); XYBarRenderer renderer2 = new XYBarRenderer() { public Paint getItemPaint(int series, int item) { XYDataset dataset = getPlot().getDataset(); if (dataset.getYValue(series, item) >= 0.0) { return Color.red; } else { return Color.green; } } }; renderer2.setSeriesPaint(0, Color.red); renderer2.setDrawBarOutline(false); renderer2.setBaseToolTipGenerator( new StandardXYToolTipGenerator( StandardXYToolTipGenerator.DEFAULT_TOOL_TIP_FORMAT, new SimpleDateFormat("d-MMM-yyyy"), new DecimalFormat("0.00"))); XYPlot plot2 = new XYPlot(data2, null, new NumberAxis("$billion"), renderer2); plot2.setBackgroundPaint(Color.lightGray); plot2.setDomainGridlinePaint(Color.white); plot2.setRangeGridlinePaint(Color.white); CombinedDomainXYPlot cplot = new CombinedDomainXYPlot(domainAxis); cplot.add(plot1, 3); cplot.add(plot2, 2); cplot.setGap(8.0); cplot.setDomainGridlinePaint(Color.white); cplot.setDomainGridlinesVisible(true); cplot.setDomainPannable(true); // return a new chart containing the overlaid plot... JFreeChart chart = new JFreeChart("United States Public Debt", JFreeChart.DEFAULT_TITLE_FONT, cplot, false); TextTitle source = new TextTitle( "Source: http://www.publicdebt.treas.gov/opd/opdhisms.htm", new Font("Dialog", Font.PLAIN, 10)); source.setPosition(RectangleEdge.BOTTOM); source.setHorizontalAlignment(HorizontalAlignment.RIGHT); chart.addSubtitle(source); LegendTitle legend = new LegendTitle(cplot); chart.addSubtitle(legend); ChartUtilities.applyCurrentTheme(chart); renderer2.setBarPainter(new StandardXYBarPainter()); renderer2.setShadowVisible(false); return chart; }
public SensorWidget( final Composite parent, final int style, final Measurements<T> totals, final Measurements<T>... parts) { super(parent, style); this.totals = totals; setLayout(new GridLayout(1, false)); setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); TimeTableXYDataset dataset = new TimeTableXYDataset(); XYBarRenderer renderer = new StackedXYBarRenderer(0.0); renderer.setBarPainter(new StandardXYBarPainter()); renderer.setDrawBarOutline(false); renderer.setShadowVisible(false); if (parts == null || parts.length == 0) { renderer.setSeriesPaint(0, Color.green); } XYPlot plot = new XYPlot(dataset, new DateAxis("Time"), new NumberAxis("Count"), renderer); plot.getDomainAxis().setLowerMargin(0.0); plot.getDomainAxis().setUpperMargin(0.0); plot.getRangeAxis().setLabel(null); plot.getDomainAxis().setLabel(null); JFreeChart realChart = new JFreeChart(plot); realChart.setTitle((String) null); chart = new ChartComposite(this, SWT.NONE, realChart, true); chart.setLayoutData(new GridData(300, 180)); final Composite labels = new Composite(this, SWT.NONE); labels.setLayout(new GridLayout(5, false)); final Label totalLabel = new Label(labels, SWT.NONE); totalLabel.setText(totals.getName()); total = new Label(labels, SWT.BOLD); final FontData[] fd = total.getFont().getFontData(); fd[0].setStyle(SWT.BOLD); total.setFont(new Font(getDisplay(), fd)); totalMin = new Label(labels, SWT.NONE); totalMax = new Label(labels, SWT.NONE); totalAvg = new Label(labels, SWT.NONE); if (parts != null && parts.length > 0) { for (Measurements<T> part : parts) { final Label label = new Label(labels, SWT.NONE); label.setText(part.getName()); final Label valueLabel = new Label(labels, SWT.BOLD); valueLabel.setFont(new Font(getDisplay(), fd)); this.parts.put( part.getName(), new MeasurementsDisplay<T>( part, valueLabel, new Label(labels, SWT.NONE), new Label(labels, SWT.NONE), new Label(labels, SWT.NONE))); } } }