2017-05-31 14 views
3

私はこのようになりますチャートを持っています。ラベルFの値は0なので、私はそれが欠落しているのは驚きではありません。JavaFXの円グラフのラベルを重複&行方不明ラベルは

は、ここでラベルの値がされています

ObservableList<PieChart.Data> pieChartData = 
     FXCollections.observableArrayList(
     new PieChart.Data("A", 0.80), 
     new PieChart.Data("B", 9.44), 
     new PieChart.Data("C", 89.49), 
     new PieChart.Data("D", 0.08), 
     new PieChart.Data("E", 0.18), 
     new PieChart.Data("F", 0.0)); 

私が試してみました:

.chart{ -fx-background-color: lightgray; 
     -fx-border-color: black; 
     -fx-legend-visible: true; 
     -fx-legend-side: bottom; 
     -fx-title-side: top; 
     -fx-clockwise: true; 
     -fx-pie-label-visible: true; 
     -fx-label-line-length: 25; 
     -fx-pie-to-label-line-curved: true; //curve label lines? 
     } 

私はそれらの多くを実現するには、デフォルトとは不要であるが、私は最後の行は、曲線ラベルを思いました行とそれはしません。

この例ではJFreeChartであるが、私はこのような何かを行うにラベルラインを希望:

enter image description here

私はDを重ねると表示ラベルからそれらを防ぐために何ができるの?

+0

?彼らは間違いなく重なり合っていますが、例えばラベル「ラベルA」の隣の右側に「ラベルE」と出会うときに移動したいのですか? – Yahya

+0

@ Yahya私はパイスライスを動かす必要はありませんが、むしろラベル行を変更したいと思います。私は私の質問を編集し、私がしようとしていることの例を挙げます。 –

+0

私が提案できる唯一のことは、あなたの数字が100になることを確認することです。意味は、使用している現在の数字がパーセンテージを見つけることです。 – Sedrick

答えて

1

JFreeChartを使用して希望の効果を得ることができます。この効果は、図のようにJavaFXで使用すると、hereです。 herePieChartFXDemo1のための完全なソースは、ディストリビューションに含まれています:

java -cp .:lib/* org.jfree.chart.fx.demo.PieChartFXDemo1 

この完全な例では、データセットと色の選択肢を反映しています。あなたは、彼らが同じポイントで会うとき、彼らが何をしたいのか

image

import java.awt.Color; 
import java.awt.Font; 
import java.text.DecimalFormat; 
import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.stage.Stage; 
import org.jfree.chart.ChartFactory; 
import org.jfree.chart.JFreeChart; 
import org.jfree.chart.fx.ChartViewer; 
import org.jfree.chart.labels.PieSectionLabelGenerator; 
import org.jfree.chart.labels.StandardPieSectionLabelGenerator; 
import org.jfree.chart.plot.PiePlot; 
import org.jfree.data.general.DefaultPieDataset; 
import org.jfree.data.general.PieDataset; 

/** 
* @see http://stackoverflow.com/q/44289920/230513 
*/ 
public class PieChartFX extends Application { 

    private static PieDataset createDataset() { 
     DefaultPieDataset dataset = new DefaultPieDataset(); 
     dataset.setValue("A", 0.8); 
     dataset.setValue("B", 9.4); 
     dataset.setValue("C", 0.1); 
     dataset.setValue("D", 89.5); 
     dataset.setValue("E", 0.2); 
     dataset.setValue("F", 0.0); 
     return dataset; 
    } 

    private static JFreeChart createChart(PieDataset dataset) { 
     JFreeChart chart = ChartFactory.createPieChart(
      "", dataset, false, true, false); 
     chart.setBackgroundPaint(Color.LIGHT_GRAY); 
     PiePlot plot = (PiePlot) chart.getPlot(); 
     plot.setOutlineVisible(false); 
     plot.setSectionPaint("A", Color.RED); 
     plot.setSectionPaint("B", Color.BLUE); 
     plot.setSectionPaint("C", Color.GREEN); 
     plot.setSectionPaint("D", Color.YELLOW); 
     plot.setSectionPaint("E", Color.CYAN); 
     plot.setLabelFont(new Font(Font.SANS_SERIF, Font.BOLD, 16)); 
     // Custom labels https://stackoverflow.com/a/17507061/230513 
     PieSectionLabelGenerator gen = new StandardPieSectionLabelGenerator(
      "{0}: {2}", new DecimalFormat("0"), new DecimalFormat("0.0%")); 
     plot.setLabelGenerator(gen); 
     return chart; 
    } 


    @Override 
    public void start(Stage stage) throws Exception { 
     PieDataset dataset = createDataset(); 
     JFreeChart chart = createChart(dataset); 
     ChartViewer viewer = new ChartViewer(chart); 
     stage.setScene(new Scene(viewer)); 
     stage.setTitle("JFreeChart: PieChartFX"); 
     stage.setWidth(600); 
     stage.setHeight(400); 
     stage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 
+0

私はJFreeChartを使うことができます。私の質問の2番目の画像はJFreeChartですが、私はJavaFXを行う必要があります。 –

+0

'JFreeChart'は_in_ JavaFXをレンダリングします。 'org.jfree.chart.fx.ChartViewer'は' javafx.scene.control.Control'です。 – trashgod

+0

ライセンスの理由からJFreeChartを使用することはできません。 –

関連する問題