2017-01-10 3 views
0

バブルチャートに3つの変数の値を表示するjfreechartアプリケーションがあります。私は、グラフ上に気泡を作る問題を持っています。ズームアウトしようとすると表示されます。 しかし、3番目の列/配列の値を1、2、3、4、5のような整数に変更すると、泡が見え始めます。誰でも私を助けてください。私は気泡がすべてのプロットされたポイントの特定のサイズを持っていることを望みます。java jfreechartライブラリバブルサイズの問題

以下は私のソースコードです:デフォルトで

package javaapplication2; 

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Shape; 
import javax.swing.JPanel; 
import org.jfree.chart.*; 
import org.jfree.chart.axis.NumberAxis; 
import org.jfree.chart.plot.PlotOrientation; 
import org.jfree.chart.plot.XYPlot; 
import org.jfree.chart.renderer.xy.XYItemRenderer; 
import org.jfree.data.xy.DefaultXYZDataset; 
import org.jfree.data.xy.XYZDataset; 
import org.jfree.ui.ApplicationFrame; 
import org.jfree.ui.RefineryUtilities; 
import org.jfree.util.ShapeUtilities; 

public class JavaApplication2 extends ApplicationFrame { 

    public JavaApplication2(String s) { 
     super(s); 
     JPanel jpanel = createDemoPanel(); 
     jpanel.setPreferredSize(new Dimension(560, 370)); 
     setContentPane(jpanel); 
    } 

    private static JFreeChart createChart(XYZDataset xyzdataset) { 
     JFreeChart jfreechart = ChartFactory.createBubbleChart(
      "AGE vs WEIGHT vs WORK", 
      "Weight", 
      "AGE", 
      xyzdataset, 
      PlotOrientation.HORIZONTAL, 
      true, true, false); 
     XYPlot xyplot = (XYPlot) jfreechart.getPlot(); 
     xyplot.setForegroundAlpha(0.65F); 
     XYItemRenderer xyitemrenderer = xyplot.getRenderer(); 
     xyitemrenderer.setSeriesPaint(0, Color.blue); 
     NumberAxis numberaxis = (NumberAxis) xyplot.getDomainAxis(); 
     numberaxis.setLowerMargin(0.2); 
     numberaxis.setUpperMargin(0.5); 
     NumberAxis numberaxis1 = (NumberAxis) xyplot.getRangeAxis(); 
     numberaxis1.setLowerMargin(0.8); 
     numberaxis1.setUpperMargin(0.9); 

     return jfreechart; 
    } 

    public static XYZDataset createDataset() { 
     DefaultXYZDataset defaultxyzdataset = new DefaultXYZDataset(); 

     double ad[] = {426081.759473, 426095.238564, 426109.490941, 426121.967623, 426130.564392, 426138.69481}; 
     double ad1[] = {113322.88289, 113271.915074, 113221.586484, 113172.511533, 113128.370338, 113085.254484}; 
     double ad2[] = {0.460819752574555, 0.850726080807893, 0.571903719860673, -0.013658463858901, -0.231945599223777, -0.256564887488579}; 
     double ad3[][] = {ad, ad1, ad2}; 
     defaultxyzdataset.addSeries("Series 1", ad3); 

     return defaultxyzdataset; 
    } 

    public static JPanel createDemoPanel() { 
     JFreeChart jfreechart = createChart(createDataset()); 
     ChartPanel chartpanel = new ChartPanel(jfreechart); 

     chartpanel.setDomainZoomable(true); 
     chartpanel.setRangeZoomable(true); 

     return chartpanel; 
    } 

    public static void main(String args[]) { 
     JavaApplication2 bubblechart = new JavaApplication2("Bubble Chart_frame"); 

     bubblechart.pack(); 
     RefineryUtilities.centerFrameOnScreen(bubblechart); 
     bubblechart.setVisible(true); 
    } 
} 
+1

は、有効な[MCVE]または[sscce](HTTPを作成して投稿する代わりに、外部ソースでコードを投稿しないでください。 org /)は、あなたの問題。コードを外部ソースに投稿しているので、あなたの質問が閉鎖される可能性があります。コードがいつGoogleドライブから消えたらどうなるでしょうか?[ツアー]この質問は将来の読者のためにもう役に立たないでしょう – Frakcool

+0

ありがとうございます。しかし、私は新しいことを手助けして、それを行う方法を理解していません。 – user3367897

+0

*「手伝ってもらえますか? * "私はそれをする方法を理解していない" *どのように何をする?あなたの速い返信ごとに、あなたは以前に提供されたリンクの1つでも読んでいないと思います。あなたが聞くことができるリンクの何かを理解していない場合は、すべてを読んだ後にあなたの質問を修正してください。 – Frakcool

答えて

2

は、ChartFactory.createBubbleChart()SCALE_ON_RANGE_AXISを持つXYBubbleRenderer指定しますが、あなたのXとデータはそれがあなたのZデータ数桁大きいであるY 。その結果、ピクセルは表示されません。希望の効果を得るには、データをscaleする必要があります。デフォルトのレンダラを使用して、コンテキストメニュー(右クリック)を使用して、両方の軸を拡大して、データへの影響を見ることができます:下記の参考例で

XYBubbleRenderer renderer = new XYBubbleRenderer(); //SCALE_ON_BOTH_AXES 
xyPlot.setRenderer(renderer); 

zoomed bubble chart

、私はしました実験を容易にするために、VERTICALプロットでより単純なデータを使用しました。で気泡のサイズ注(1,1)、(2,2)及び(3,3)Z座標の比である:/:/:// sscce:/

XYZ bubble chart

import java.awt.Color; 
import java.awt.Dimension; 
import javax.swing.JPanel; 
import org.jfree.chart.*; 
import org.jfree.chart.axis.NumberAxis; 
import org.jfree.chart.plot.PlotOrientation; 
import org.jfree.chart.plot.XYPlot; 
import org.jfree.chart.renderer.xy.XYBubbleRenderer; 
import org.jfree.data.xy.DefaultXYZDataset; 
import org.jfree.data.xy.XYZDataset; 
import org.jfree.ui.ApplicationFrame; 
import org.jfree.ui.RefineryUtilities; 
import static org.jfree.chart.renderer.xy.XYBubbleRenderer.*; 

/** @see http://stackoverflow.com/a/41575283/230513 */ 
public class BubbleChartTest extends ApplicationFrame { 

    public BubbleChartTest(String s) { 
     super(s); 
     JPanel jpanel = createDemoPanel(); 
     jpanel.setPreferredSize(new Dimension(560, 370)); 
     setContentPane(jpanel); 
    } 

    private static JFreeChart createChart(XYZDataset xyzDataset) { 
     JFreeChart jfreechart = ChartFactory.createBubbleChart(
      "X vs Y vs Z", "X", "Y", xyzDataset, 
      PlotOrientation.VERTICAL, true, true, false); 
     XYPlot xyPlot = (XYPlot) jfreechart.getPlot(); 
     xyPlot.setForegroundAlpha(0.5F); 
     XYBubbleRenderer renderer = new XYBubbleRenderer(SCALE_ON_BOTH_AXES); 
     xyPlot.setRenderer(renderer); 
     renderer.setSeriesPaint(0, Color.blue); 
     NumberAxis domain = (NumberAxis) xyPlot.getDomainAxis(); 
     domain.setLowerMargin(0.2); 
     domain.setUpperMargin(0.4); 
     NumberAxis range = (NumberAxis) xyPlot.getRangeAxis(); 
     range.setLowerMargin(0.2); 
     range.setUpperMargin(0.4); 

     return jfreechart; 
    } 

    public static XYZDataset createDataset() { 
     DefaultXYZDataset dataset = new DefaultXYZDataset(); 
     double a[][] = { 
      {1, 2, 3}, 
      {1, 2, 3}, 
      {2/3d, 3/3d, 4/3d} 
     }; 
     dataset.addSeries("Series", a); 
     return dataset; 
    } 

    public static JPanel createDemoPanel() { 
     JFreeChart chart = createChart(createDataset()); 
     ChartPanel chartPanel = new ChartPanel(chart); 
     chartPanel.setDomainZoomable(true); 
     chartPanel.setRangeZoomable(true); 
     return chartPanel; 
    } 

    public static void main(String args[]) { 
     BubbleChartTest test = new BubbleChartTest("Bubble Chart"); 
     test.pack(); 
     RefineryUtilities.centerFrameOnScreen(test); 
     test.setVisible(true); 
    } 
} 
+0

私はそれを確認しました。私はピクセルをズームインすることなく自動的に表示させることができます。ピクセルのすべてのサイズを同じに見えるようにすると、同じサイズになります。 – user3367897

+0

スケールは私が知る唯一の方法です。スケーリングされていないデータをツールチップに表示することができます。 – trashgod

+0

私はデータベースからのデータの範囲を持っていると私は、その範囲に応じて、特定の色を持つように3列目の値を表示するようにグラフをしたい。例えば0〜3は赤、-0〜-3は緑になりますので、どのようにして私を助けてください。あなたの助けを感謝します。 – user3367897