private JFreeChart createChart(IntervalXYDataset intervalxydataset) { JFreeChart jfreechart = ChartFactory.createXYBarChart( frameTitle, X_LABEL, true, Y_LABEL, intervalxydataset, PlotOrientation.VERTICAL, true, false, false); jfreechart.addSubtitle(new TextTitle(SUB_TITLE, new Font("Dialog", 2, 10))); jfreechart.setBackgroundPaint(Color.white); XYPlot xyplot = (XYPlot) jfreechart.getPlot(); XYBarRenderer xybarrenderer = (XYBarRenderer) xyplot.getRenderer(); StandardXYToolTipGenerator standardxytooltipgenerator = new StandardXYToolTipGenerator( "{1} = {2}", new SimpleDateFormat("yyyy"), new DecimalFormat("0")); xybarrenderer.setBaseToolTipGenerator(standardxytooltipgenerator); xybarrenderer.setMargin(0.10000000000000001D); xyplot.setBackgroundPaint(Color.lightGray); xyplot.setRangeGridlinePaint(Color.white); DateAxis dateaxis = (DateAxis) xyplot.getDomainAxis(); dateaxis.setTickMarkPosition(DateTickMarkPosition.MIDDLE); dateaxis.setLowerMargin(0.01D); dateaxis.setUpperMargin(0.01D); return jfreechart; }
@Override public void initComponents() { dataset = new XYSeriesCollection(); JFreeChart chart = ComponentFactory.createXYBarChart( K1105_SC.getValue(), K1106_SL.getValue(), dataset, (XYItemLabelGenerator) null); XYPlot plot = chart.getXYPlot(); plot.setDomainPannable(true); plot.setRangePannable(true); final String scLabel = "<html>" + K1105_SC.getValue() + ": "; final String slLabel = "<br>" + K1106_SL.getValue() + ": "; XYBarRenderer renderer = (XYBarRenderer) plot.getRenderer(); renderer.setBarAlignmentFactor(0); renderer.setMargin(0.2); renderer.setSeriesToolTipGenerator( 0, new XYToolTipGenerator() { @Override public String generateToolTip(XYDataset dataset, int arg1, int arg2) { int scNum = (int) dataset.getXValue(arg1, arg2); int slCount = (int) dataset.getYValue(arg1, arg2); return scLabel + scNum + slLabel + slCount + "</html>"; } }); NumberAxis yAxis = (NumberAxis) plot.getRangeAxis(); yAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); NumberAxis xAxis = (NumberAxis) plot.getDomainAxis(); xAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); chartPanel = new ChartPanel(chart); chartPanel.setMouseWheelEnabled(true); chartPanel.setPreferredSize(PREFERRED_CHART_SIZE); propsPanel.add(chartPanel); }
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; }