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); }
/** * 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 ChartPanel updateHistPanel(double[] data, double minVal, double maxVal, int numPockets) { HistogramDataset datasetHist = new HistogramDataset(); if (numPockets < 1) { numPockets = 20; } datasetHist.addSeries("seria1", data, numPockets, minVal, maxVal); JFreeChart charthist = ChartFactory.createHistogram( null, null, null, datasetHist, PlotOrientation.VERTICAL, false, true, false); charthist.setBackgroundPaint(JFreeChart.DEFAULT_BACKGROUND_PAINT); XYPlot plot = (XYPlot) charthist.getPlot(); plot.setForegroundAlpha(0.85f); XYBarRenderer renderer = (XYBarRenderer) plot.getRenderer(); renderer.setDrawBarOutline(false); return new GraphPanel(charthist); }
private static JFreeChart createDistributionViewChart() { XYPlot plot = new XYPlot(); XYLineAndShapeRenderer dRenderer = new XYSplineRenderer(); dRenderer.setBaseShapesVisible(false); dRenderer.setAutoPopulateSeriesPaint(false); dRenderer.setAutoPopulateSeriesStroke(false); dRenderer.setBaseStroke(TsCharts.getStrongStroke(LinesThickness.Thin)); dRenderer.setDrawSeriesLineAsPath(true); // not sure if useful plot.setDataset(DISTRIBUTION_INDEX, Charts.emptyXYDataset()); plot.setRenderer(DISTRIBUTION_INDEX, dRenderer); XYBarRenderer hRenderer = new XYBarRenderer(); hRenderer.setShadowVisible(false); hRenderer.setDrawBarOutline(true); hRenderer.setAutoPopulateSeriesPaint(false); hRenderer.setAutoPopulateSeriesOutlinePaint(false); hRenderer.setBaseSeriesVisibleInLegend(false); plot.setDataset(HISTOGRAM_INDEX, Charts.emptyXYDataset()); plot.setRenderer(HISTOGRAM_INDEX, hRenderer); NumberAxis domainAxis = new NumberAxis(); domainAxis.setTickLabelPaint(TsCharts.CHART_TICK_LABEL_COLOR); plot.setDomainAxis(domainAxis); plot.setDomainGridlinesVisible(false); NumberAxis rangeAxis = new NumberAxis(); rangeAxis.setTickLabelPaint(TsCharts.CHART_TICK_LABEL_COLOR); rangeAxis.setTickUnit(new NumberTickUnit(0.05)); rangeAxis.setNumberFormatOverride(new DecimalFormat("0.###")); plot.setRangeAxis(rangeAxis); plot.mapDatasetToDomainAxis(0, 0); plot.mapDatasetToRangeAxis(0, 0); plot.mapDatasetToDomainAxis(1, 0); plot.mapDatasetToRangeAxis(1, 0); JFreeChart result = new JFreeChart("", JFreeChart.DEFAULT_TITLE_FONT, plot, true); result.setPadding(TsCharts.CHART_PADDING); result.getTitle().setFont(TsCharts.CHART_TITLE_FONT); result.getLegend().setFrame(BlockBorder.NONE); result.getLegend().setBackgroundPaint(null); return result; }
private JFreeChart createChart(IntervalXYDataset intervalxydataset) { String templayerName = layerName; if (map.valueSlider.isVisible()) templayerName = layerName.replace("*", String.valueOf(map.valueSlider.getValue() + 1)); JFreeChart jfreechart = ChartFactory.createHistogram( templayerName, null, null, intervalxydataset, PlotOrientation.VERTICAL, true, true, false); XYPlot xyplot = (XYPlot) jfreechart.getPlot(); xyplot.setForegroundAlpha(0.85F); XYBarRenderer xybarrenderer = (XYBarRenderer) xyplot.getRenderer(); xybarrenderer.setDrawBarOutline(true); return jfreechart; }
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 void testHistogram1DAdapter() { IHistogram1D histogram = histogramFactory.createHistogram1D("h1d", 100, 0, 100); Random random = new Random(); for (int i = 0; i < 100000; i++) { histogram.fill(random.nextInt(100)); } Histogram1DAdapter adapter = new Histogram1DAdapter(histogram); // int getSeriesCount() int seriesCount = adapter.getSeriesCount(); System.out.println("seriesCount: " + seriesCount); // int getItemCount(int series) int itemCount = adapter.getItemCount(VALUES); System.out.println("itemCount: " + itemCount); // Comparable getSeriesKey(int series) Comparable<?> seriesKey = adapter.getSeriesKey(VALUES); System.out.println("data series key: " + seriesKey); seriesKey = adapter.getSeriesKey(ERRORS); System.out.println("error series key: " + seriesKey); System.out.println(); for (int item = 0; item < itemCount; item++) { System.out.println("item " + item); double x = adapter.getXValue(VALUES, item); double xLow = adapter.getStartXValue(VALUES, item); double xHigh = adapter.getEndXValue(VALUES, item); double y = adapter.getYValue(VALUES, item); double yLow = adapter.getStartYValue(VALUES, item); double yHigh = adapter.getEndYValue(VALUES, item); System.out.format( " bin data (x,xLow,xHigh,y,yLow,yHigh) = %f,%f,%f,%f,%f,%f%n", x, xLow, xHigh, y, yLow, yHigh); x = adapter.getXValue(ERRORS, item); xLow = adapter.getStartXValue(ERRORS, item); xHigh = adapter.getEndXValue(ERRORS, item); y = adapter.getYValue(ERRORS, item); yLow = adapter.getStartYValue(ERRORS, item); yHigh = adapter.getEndYValue(ERRORS, item); System.out.format( " error data (x,xLow,xHigh,y,yLow,yHigh) = %f,%f,%f,%f,%f,%f%n", x, xLow, xHigh, y, yLow, yHigh); x = adapter.getXValue(POINTS, item); y = adapter.getYValue(POINTS, item); System.out.format(" point data (x,y) = %f,%f%n", x, y); } System.out.println(); System.out.println(); System.out.println("printing step data ..."); itemCount = adapter.getItemCount(STEPS); System.out.println("step itemCount: " + itemCount); for (int item = 0; item < itemCount; item++) { System.out.println("item " + item); double x = adapter.getXValue(STEPS, item); double y = adapter.getYValue(STEPS, item); // double y = adapter.getYValue(STEPS, item); System.out.format(" step data (x,y) = %f,%f%n", x, y); } // Set the axis labels. String[] labels = ConverterUtil.getAxisLabels(histogram); NumberAxis xAxis = new NumberAxis(labels[0]); NumberAxis yAxis = new NumberAxis(labels[1]); // Create the plot without any data. XYPlot plot = new XYPlot(null, xAxis, yAxis, null); // Bar chart XYDataset barData = new Histogram1DAdapter(histogram); XYBarRenderer barRenderer = new XYBarRenderer(); barRenderer.setSeriesVisible(ERRORS, false); barRenderer.setSeriesVisible(POINTS, false); barRenderer.setSeriesVisible(STEPS, false); // barRenderer.setSeriesVisible(VALUES, false); // DEBUG barRenderer.setDrawBarOutline(true); plot.setDataset(VALUES, barData); plot.setRenderer(VALUES, barRenderer); // Errors XYDataset errors = new Histogram1DAdapter(histogram); XYErrorRenderer errorRenderer = new XYErrorRenderer(); errorRenderer.setSeriesVisible(VALUES, false); errorRenderer.setSeriesVisible(POINTS, false); errorRenderer.setSeriesVisible(STEPS, false); // errorRenderer.setSeriesVisible(ERRORS, false); // DEBUG errorRenderer.setBaseShapesVisible(false); errorRenderer.setSeriesPaint(0, Color.black); plot.setDataset(ERRORS, errors); plot.setRenderer(ERRORS, errorRenderer); // Points XYDataset points = new Histogram1DAdapter(histogram); XYItemRenderer pointRenderer = new XYLineAndShapeRenderer(); pointRenderer.setSeriesVisible(VALUES, false); pointRenderer.setSeriesVisible(ERRORS, false); pointRenderer.setSeriesVisible(STEPS, false); // pointRenderer.setSeriesVisible(POINTS, false); // DEBUG plot.setDataset(POINTS, points); plot.setRenderer(POINTS, pointRenderer); // Steps XYDataset steps = new Histogram1DAdapter(histogram); XYItemRenderer stepRenderer = new XYStepRenderer(); stepRenderer.setSeriesVisible(VALUES, false); stepRenderer.setSeriesVisible(ERRORS, false); stepRenderer.setSeriesVisible(POINTS, false); // stepRenderer.setSeriesVisible(STEPS, false); plot.setDataset(STEPS, steps); plot.setRenderer(STEPS, stepRenderer); // Set proper rendering order. plot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD); // Set style. ChartFactory.setChartTheme(new DefaultChartTheme()); XYBarRenderer.setDefaultShadowsVisible(false); // Create the chart. JFreeChart chart = new JFreeChart(histogram.title(), JFreeChart.DEFAULT_TITLE_FONT, plot, false); // Show the chart in an application frame. ChartPanel panel = new ChartPanel(chart); ApplicationFrame frame = new ApplicationFrame("Histogram1DAdapterTest"); frame.setContentPane(panel); frame.pack(); RefineryUtilities.centerFrameOnScreen(frame); frame.setVisible(true); }
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))); } } }