2016-12-05 2 views
1

어떻게 막대 그래프를 표시 할 수 있습니까? 막대 그래프를 가로로 표시

enter image description here

는 현재 기본적으로 막대 그래프가 거꾸로된다. 많은 막대가 있으므로 꼭대기에서 밑으로 쌓아야합니다.

public void showBarDiagram() { 
    String[] titles = new String[]{""}; 
    List<double[]> values = new ArrayList<double[]>(); 
    values.add(new double[]{14230, 12300, 14240, 300, 15900, 19200, 22030, 21200, 19500, 15500, 
     12600, 14000}); 
    int[] colors = new int[]{ColorUtil.BLUE}; 
    XYMultipleSeriesRenderer renderer = buildBarRenderer(colors); 
    setChartSettings(renderer, "Enquiry", "Month", "", 0.5, 
      12.5, 0, 24000, ColorUtil.GRAY, ColorUtil.LTGRAY); 
    ((XYSeriesRenderer) renderer.getSeriesRendererAt(0)).setDisplayChartValues(true); 
    renderer.setXLabels(12); 
    renderer.setYLabels(10); 
    renderer.setXLabelsAlign(Component.LEFT); 
    renderer.setYLabelsAlign(Component.LEFT); 
    renderer.setZoomEnabled(false); 
    renderer.setZoomRate(1.1f); 
    renderer.setBarSpacing(0.5f); 
    initRendererer(renderer); 
    BarChart chart = new BarChart(buildBarDataset(titles, values), renderer, 
      BarChart.Type.STACKED); 
    ChartComponent c = new ChartComponent(chart); 
    c.setFocusable(true); 
    c.setZoomEnabled(true); 
    c.setPanEnabled(true); 
    barContainer.add(c); 
} 

protected XYMultipleSeriesRenderer buildBarRenderer(int[] colors) { 
    XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(); 
    renderer.setAxisTitleTextSize(smallFont.getHeight()/2); 
    renderer.setChartTitleTextFont(smallFont); 
    renderer.setLabelsTextSize(smallFont.getHeight()/2); 
    renderer.setLegendTextSize(smallFont.getHeight()/2); 
    int length = colors.length; 
    for (int i = 0; i < length; i++) { 
     XYSeriesRenderer r = new XYSeriesRenderer(); 
     r.setColor(colors[i]); 
     renderer.addSeriesRenderer(r); 
    } 
    return renderer; 
} 

protected void setChartSettings(XYMultipleSeriesRenderer renderer, String title, String xTitle, 
     String yTitle, double xMin, double xMax, double yMin, double yMax, int axesColor, 
     int labelsColor) { 
    renderer.setChartTitle(title); 
    renderer.setXTitle(xTitle); 
    renderer.setYTitle(yTitle); 
    renderer.setXAxisMin(xMin); 
    renderer.setXAxisMax(xMax); 
    renderer.setYAxisMin(yMin); 
    renderer.setYAxisMax(yMax); 
    renderer.setAxesColor(axesColor); 
    renderer.setLabelsColor(labelsColor); 
} 

protected void initRendererer(DefaultRenderer renderer) { 
    renderer.setBackgroundColor(0xffffffff); 
    renderer.setApplyBackgroundColor(true); 
    renderer.setLabelsColor(0xff000000); 
    renderer.setAxesColor(0xff000000); 
    if(Font.isNativeFontSchemeSupported()) { 
     Font fnt = Font.createTrueTypeFont("native:MainLight", "native:MainLight"). 
       derive(Display.getInstance().convertToPixels(2.5f), Font.STYLE_PLAIN); 
     renderer.setTextTypeface(fnt); 
     renderer.setChartTitleTextFont(fnt); 
     renderer.setLabelsTextFont(fnt); 
     renderer.setLegendTextFont(fnt); 

     if(renderer instanceof XYMultipleSeriesRenderer) { 
      ((XYMultipleSeriesRenderer)renderer).setAxisTitleTextFont(fnt); 
     } 
     if(renderer instanceof XYMultipleSeriesRenderer) { 
      XYMultipleSeriesRenderer x = (XYMultipleSeriesRenderer)renderer; 
      x.setMarginsColor(0xfff7f7f7); 
      x.setXLabelsColor(0xff000000); 
      x.setYLabelsColor(0, 0xff000000); 
     } 
    } 
} 

protected XYMultipleSeriesDataset buildBarDataset(String[] titles, List<double[]> values) { 
    XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset(); 
    int length = titles.length; 
    for (int i = 0; i < length; i++) { 
     CategorySeries series = new CategorySeries(titles[i]); 
     double[] v = values.get(i); 
     int seriesLength = v.length; 
     for (int k = 0; k < seriesLength; k++) { 
      series.add(v[k]); 
     } 
     dataset.addSeries(series.toXYSeries()); 
    } 
    return dataset; 
} 

protected ChartComponent newChart(AbstractChart chart) { 

    ChartComponent c = new ChartComponent(chart); 
    c.setFocusable(true); 
    c.setZoomEnabled(true); 
    c.setPanEnabled(true); 
    return c; 
} 

업데이트 1 :

setChartSettings (렌더러 "", "", "아니오", 0.5, 17.5, 0, 400, ColorUtil.GRAY, ColorUtil.LTGRAY);

enter image description here

난 chartSetting 수직 배향을 이용하지만, X, Y 축 가치 교환에 문제로되었다.

XYMultipleSeriesRenderer renderer = buildBarRenderer(colors); 
renderer.setOrientation(XYMultipleSeriesRenderer.Orientation.VERTICAL); 
setChartSettings(renderer, "No", "", "", 0, 400,0.5, 17.5, ColorUtil.GRAY, ColorUtil.LTGRAY); 

enter image description here

+0

현재 막대 차트에 대한 지원에 해당 옵션이 포함되어 있다고 생각하지 않지만 스티브에게이를 확인하고 가능하면 직접 구현할 수있는 방법을 가리 키도록 요청했습니다. –

답변

1

XYMultipleSeriesRenderer는 setOrientation 방법 incldudes.

XYMultipleSeriesRenderer renderer = buildBarRenderer(colors); 
renderer.setOrientation(Orientation.HORIZONTAL); 

이렇게하면 원하는 효과를 얻을 수 있습니다.

+0

renderer.setOrientation (XYMultipleSeriesRenderer.Orientation.VERTICAL) 장난. 감사합니다 – beck

+0

또한 x와 y 축의 값을 교환해야합니다. 그리고 잘 작동하지 않습니다. Plz는 위의 "update 1"을 살펴 봅니다. – beck

관련 문제