如何在 BubbleChart javafx 中更改气泡大小

科斯特鲁姆

我正在编写一个javafx程序,程序应该显示BubbleChart公司分析。在 y 轴上显示去年的收入,在 x 轴上显示公司经营的细分市场的数量。泡沫的半径取决于公司经营的细分市场。

我知道我可以通过写作来制造“泡沫”:

new XYChart.Data<Number,Number>(nbrOfMarketSegments, latestYearRevenue, radiusOfBubble);

问题是 y 轴最大值为 100(百万欧元),x 轴最大值为 20,这使得图中的“气泡”非常平坦(因为radiusOfBubble与细分市场的最大数量相比,数字大而小到最大收入。我的问题是,即使 x 轴和 y 轴具有如此不同的跨度,有没有办法使气泡更圆?

气泡图

还不错

JavaFX 图表是一段邪恶的代码。只有当您确切知道背后的代码库时,才有可能进行改编,这在某种程度上违背了信息隐藏的良好原则。在 a 中获得圆形气泡BubbleChart是这些适应之一。

您可以做的最简单的事情是BubbleChart创建子类并创建您自己的圆形气泡。

不起作用的事情:

创建数据节点的地方(method createBubble)是私有的,所以你不能覆盖它来创建Circles。(除此之外 - 即使你有一个自定义数据节点,它也不会工作,因为布局代码会BubbleChart忽略所有不是 type 的数据节点Ellipse,所以你最终会得到圆形气泡,但都在位置 (0/ 0)...)。

接下来想到的是覆盖设置省略号轴的位置。但是不,所有的布局代码都是一个单一的方法 - 没有layoutNode(Node)为每个节点调用的方法,您可以覆盖它以添加您的自定义布局代码。

解决方案:

因此,您必须覆盖该方法layoutPlotChildren,调用基本实现,然后更改所有节点的 Y 半径:

public class CircularBubbleChart<X, Y> extends BubbleChart<X, Y> {

    public CircularBubbleChart(Axis<X> xAxis, Axis<Y> yAxis) {
        super(xAxis, yAxis);
    }

    public CircularBubbleChart(Axis<X> xAxis, Axis<Y> yAxis, ObservableList<Series<X, Y>> data) {
        super(xAxis, yAxis, data);
    }

    @Override
    protected void layoutPlotChildren() {
        super.layoutPlotChildren();
        getData().stream().flatMap(series -> series.getData().stream())
            .map(Data::getNode)
            .map(StackPane.class::cast)
            .map(StackPane::getShape)
            .map(Ellipse.class::cast)
            .forEach(ellipse -> ellipse.setRadiusY(ellipse.getRadiusX()));
    }
}

用法很简单:只需将图表创建代码行从 更改... = new BubbleChart()... = new CircularBubbleChart()其他一切都保持不变。

注意:此代码将 Y 半径更改为等于 X 半径,因此气泡半径将以 X 轴为单位。当然,您也可以反过来得到以 Y 轴为单位的气泡半径。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在BubbleChart javafx中更改气泡大小

来自分类Dev

如何在 BubbleChart 中显示 x 轴标签?

来自分类Dev

Primefaces中的BubbleChart

来自分类Dev

如何在javafx中更改文本字体大小?

来自分类Dev

如何在JavaFx中设置svgPath的大小

来自分类Dev

CombinedXYChart中的BubbleChart和BarChart引发异常

来自分类Dev

dc.bubbleChart过滤器上的动态气泡半径

来自分类Dev

如何不允许窗口更改JavaFX中的大小

来自分类Dev

如何更改Google图表中气泡的大小?

来自分类Dev

如何在javafx中调整imageview图像的大小?

来自分类Dev

如何在JavaFX中监听Stage的大小调整事件?

来自分类Dev

如何在javafx fxmlcontroller中更改menuitem中的场景

来自分类Dev

如何在ggplot图例中显示更多气泡大小?

来自分类Dev

如何在javafx中更改窗格的颜色?

来自分类Dev

如何在JavaFX中更改子级的顺序

来自分类Dev

如何在javafx TextField中更改文本的颜色?

来自分类Dev

如何在JavaFx单选按钮中更改DOt?

来自分类Dev

如何在JavaFX中更改图像的颜色

来自分类Dev

如何在javafx中更改特定单元数据的样式?

来自分类Dev

如何在JavaFx中动态更改舞台的高度

来自分类Dev

如何在TableView javafx中更改所选行的颜色

来自分类Dev

如何在javaFx borderPane中从LeftPane更改CenterPane?

来自分类Dev

如何在javaFX中更改窗口并从窗口获取输入?

来自分类Dev

如何在 javafx 中更改 Tabpane 标题的焦点边框颜色

来自分类Dev

如何在JavaFX中设置占位符?

来自分类Dev

javafx:如何在TableView中显示String

来自分类Dev

如何在Javafx中添加刻度线?

来自分类Dev

如何在JavaFX WebView中包含jquery?

来自分类Dev

如何在JavaFX中设置ListView边框

Related 相关文章

热门标签

归档