【问题标题】:How to create a "spectrum" chart using Vaadin 14+如何使用 Vaadin 14+ 创建“频谱”图表
【发布时间】:2020-07-06 16:49:34
【问题描述】:

在 Vaadin 14(或更高版本)中是否可以创建所谓的“光谱”图表?本质上,它与“散点图”有 99% 的相同之处,只是从该点一直到 x 轴绘制了一条线(请参见下面的图 1 和图 2,其中更多或看起来像正确的光谱图。) .我创建了一个“hack”来使用“折线图”在 Vaadin 中实现这些准频谱图,并在我的直接点的左侧和右侧添加两个强度为 0 的“假”点(如下面的代码 sn-p 所示标题为“代码 sn-p 1”)。虽然我的 hack 或多或少有效(请参见下面的图 1 图像),但它会导致一些问题:1)它似乎使线条看起来更像条形图矩形(请参见图 2)而不是窄点线条; 2)似乎在x轴位置上造成了轻微的错误。例如,在图 2 中,黑线在蓝线的左侧;但是在图 3 中(只不过是放大的透视图),它在右边;和 3) 它导致 x 轴以与系列相同的颜色出现,因为我的 hack 导致出现一条线,将一个点的假右“0”与下一个点的假左“0”连接起来。 (另外,这意味着我的图表的点数是它需要的点数的 3 倍,因为每个真实点都有两个假 0 点。)

代码 sn-p 1:

   private void addTheSeries(DataSeries series, final float mz, final float intensity) {
        //14.1.19
        series.add(new DataSeriesItem(mz, 0));
        series.add(new DataSeriesItem(mz, intensity));
        series.add(new DataSeriesItem(mz, 0));
    }

图 1:

图2:

我在 Open jdk 11 上使用 Vaadin 14.1.19,并在 Chromebook 上使用 Chrome 作为浏览器。

【问题讨论】:

  • 能否请您提供一个目标是什么样子的示例?
  • @cfrick 如果“目标”是指“它应该是什么样子”,这里有一个例子:lh5.ggpht.com/_NNjxeW9ewEc/TJj9JMJkYeI/AAAAAAAAC54/rUi8Q4-0-YI/… 从本质上讲,即使你放大,线条也应该很细,永远不会像一个 fat 矩形。也就是说,线宽是一个常数,与是否放大无关。(当然,它需要准确,在上面的图1和图2中不是这样,因为黑色和蓝色线切换顺序。)
  • @cfrick 在上面的链接中,您还会注意到轴的颜色与系列的颜色不同,这与我的“hack”解决方案不同,其中轴将使用颜色该系列的。
  • @cfrick 有什么想法吗?

标签: vaadin vaadin-flow vaadin14 vaadin-charts


【解决方案1】:

我认为在这种情况下,而不是使用 Line 类型,这是您从使用 Column 类型中受益的默认值。您可以将列配置为细,配置 zoomType 并使用轴配置来获得您想要的极端。

Chart chart = new Chart(ChartType.COLUMN);

Configuration configuration = chart.getConfiguration();
configuration.setTitle("Spectrum example");

configuration.getChart().setZoomType(Dimension.XY);

DataSeries series = new DataSeries();
series.add(new DataSeriesItem(120, 5));
series.add(new DataSeriesItem(180, 50));
series.add(new DataSeriesItem(290, 350));
series.add(new DataSeriesItem(420, 500));
series.add(new DataSeriesItem(740, 450));

PlotOptionsColumn options = new PlotOptionsColumn();
options.setPointWidth(1);
series.setPlotOptions(options);

configuration.addSeries(series);
YAxis y = configuration.getyAxis();
y.setTitle("");

configuration.getLegend().setEnabled(false);
add(chart);

结果如下所示:

并且放大后宽度保持不变:

【讨论】:

  • 酷,我从来没有想到过;我会尝试并回复你@Guille
  • 我使用了这个解决方案,但是虽然它部分解决了问题(线条总是很细,而且它们似乎保持正确的顺序),但我认为它导致了另一个问题,我已将其记录为单独的 SO 问题:stackoverflow.com/questions/63414969/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-03
  • 1970-01-01
  • 1970-01-01
  • 2017-01-10
  • 1970-01-01
  • 1970-01-01
  • 2022-01-21
相关资源
最近更新 更多