Xamarin 中的 Shinobi 图表具有 2 个 y 轴的多个、多个系列

Shinobi Charts in Xamarin multiple, multiple series with 2 y-axis

我无法将具有 2 个列系列和 1 个 y 轴的图表转换为具有相同列系列和 2 个 y 轴的图表。

顶部您看到带有 1 个 y 轴的图表,看起来不错:

在底部,您可以看到添加了另一个 y 轴后发生的情况,列重叠而不是并排放置在 x 轴刻度线上。是否可以覆盖决定列是否应该彼此相邻而不是重叠的方法?如果是这样,我必须覆盖什么?

非常感谢您的帮助。

进一步了解案例:

我们的想法是查看可能具有不同规模的多个趋势,即彼此相邻的销售人员的绩效或不同规模市场的销售营业额,以查看 2 的相对增长,即使他们的规模可能非常不同。一个例子是一个销售员 (1) 在 2017 年销售了另一个销售员 (2) 的 1/10,那么在下一年,我们可以看到销售员 1 的销售额增加了 15%,而销售员 2 的销售额只增加了 2%,因此,我们将能够看到哪个销售员的增长最好,即使一个销售员可能已经积累了足够多的客户来销售 10 倍的产品,我们可以奖励将客户价值增加 15% 的销售员。

实施使用从 pc 软件发送的数据,这些数据显示在(目前仅)IOS 应用程序和不同的网络解决方案中。数据可能会有所不同,通常包括带有数字的 y 轴和带有销售区域或一年中的月份等类别的 x 轴。每个数据组都是我们添加到图表中的一个系列,我们让用户可以选择每个系列的第一个或第二个 y 轴。 这个列问题是一个愿望,但数据可以用列和线系列显示,设计人员更喜欢列,当比较相同的统计数据时。

另一种解决方案可能是设置单独的列系列,这样当它们重叠时您仍然可以看到它们,但我找不到这样的变量,据我所知,所有列的宽度都由间距、列数、刻度线数量和图表大小

在第一张图片中,由于您对两个系列使用相同的轴,图表会自动将两个列系列组合在一起,因此它们并排显示。在这种情况下,可以使用系列上的 groupIndex property 来覆盖分组,这样它们就会重叠。

然而,系列只有在同一轴上才能组合在一起,所以在第二张图片中,由于系列使用不同的 y 轴,它们不能组合(并且 groupIndex 属性 不会影响此行为)。

为了解决这个问题,我建议使用 SChartDateTimeAxis 作为 x 轴,并调整系列的 x 值和系列上的 barColumnSpacing 属性 ' style 将列放置在您想要的位置。

艾莉森

编辑: 回答您关于提前不知道类别的评论:

由于无法对具有不同轴的系列进行分组,因此获得所需图表的唯一方法是操纵数据。

在这种情况下,我建议使用 SChartNumberAxis 并将 x 值设置为数字,这样可以 space 根据您的需要列出列,例如:

let salesData: [[Double : Double]] = [
    [0.5 : 5.65, 3.5 : 12.6, 6.5 : 8.4],
    [1.5 : 4.35, 4.5 : 13.2, 7.5 : 4.6, 10.5 : 0.6]
]

然后你可以使用SChartDelegatesChart:alterTickMark:beforeAddingToAxis:方法来改变刻度标签文本,例如如果刻度线的值为 1,您可以将标签文本设置为“2017”(不要忘记调整标签大小以适合);如果它是 4,你可以将它设置为“2018”;如果它是您不想显示的数字,您可以将其设置为空。

然后您可能希望使用系列中的 barColumnSpacing 属性 style 来固定列的宽度。

我知道这是一个稍微复杂的解决方案,所以我想知道您是否可以告诉我们更多关于您的用例的信息?这不是我们以前遇到过的事情。多个 y 轴通常用于显示大小不可比的数据(例如温度和降雨量),因此以这种方式使用两个列系列似乎很不寻常。