Spotfire IronPython-可视化更改列

时间:2019-11-13 15:58:37

标签: ironpython spotfire

我有一个代码,例如“动作控制”按钮的代码:

from Spotfire.Dxp.Application.Visuals import *
from Spotfire.Dxp.Data import *

if (vis.TypeId == VisualTypeIdentifiers.BarChart):
    vis.TypeId = VisualTypeIdentifiers.LineChart
    vis.XAxis.Expression = "City"

elif (vis.TypeId == VisualTypeIdentifiers.LineChart):
    vis.TypeId = VisualTypeIdentifiers.BarChart
    vis.XAxis.Expression = "Country"

由于某种原因,这给了我错误:

'Visual' object has no attribute 'XAxis'

我也尝试过将其投射为:

vis = vis.As[VisualContent]()

并像这样包围表达式:

vis.XAxis.Expression = "[Country]"

但是没有成功,并且出现类似错误。删除XAxis表达式部分后,代码将成功运行,并且单击按钮即可在折线图和条形图之间切换。但是,我还想要在这两种状态之间更改X轴。有什么想法吗?

编辑

这是我更新的脚本,它返回另一个错误:


if (vis.TypeId == VisualTypeIdentifiers.BarChart):
    visual = vis.As[LineChart]()
    #visual.TypeId = VisualTypeIdentifiers.LineChart
    visual.XAxis.Expression = "[City]"

elif (vis.TypeId == VisualTypeIdentifiers.LineChart):
    visual = vis.As[BarChart]()
    #visual.TypeId = VisualTypeIdentifiers.BarChart
    visual.XAxis.Expression = "[Country]"

错误:

File "<string>", line 7, in <module>
AttributeError: 'NoneType' object has no attribute 'XAxis'

同样,可视化被添加为名为“ vis”的脚本参数。

2 个答案:

答案 0 :(得分:1)

我设法找出答案。在这方面,Spotfire API有点混乱,因为通过GUI添加可视化对象所获得的默认对象是可视对象,这意味着您必须先将其转换为所需的可视化类型,然后才能访问“ XAxis”之类的类字段”,属于特定的可视化类别。作为Spotfire API的初学者,这让我感到困惑,但这是一个重要的区别。您需要将可视化类型从Visual对象转换为访问字段。 Visual类可以更改其TypeId,但是XAxis没有字段,因此我们将其转换为具有XAxis字段的BarChart或LineChart类型。

视觉类字段: https://docs.tibco.com/pub/doc_remote/spotfire/7.12.0/doc/api/html/T_Spotfire_Dxp_Application_Visual.htm

图表类字段: https://docs.tibco.com/pub/doc_remote/spotfire/7.12.0/doc/api/html/T_Spotfire_Dxp_Application_Visuals_BarChart.htm

这些是单独的类链,BarChart不是Visual的子类,正如我可能期望的那样。

if (vis.TypeId == VisualTypeIdentifiers.BarChart):
    vis.TypeId = VisualTypeIdentifiers.LineChart
    vis = vis.As[LineChart]()
    vis.XAxis.Expression = "[City]"

elif (vis.TypeId == VisualTypeIdentifiers.LineChart):
    vis.TypeId = VisualTypeIdentifiers.BarChart
    vis = vis.As[BarChart]()
    vis.XAxis.Expression = "[Country]"

如果一开始没有转换Visual对象的TypeId,它将被解释为NoneType对象。

答案 1 :(得分:0)

下面是一些我用来切换X轴表达式的IronPython的工作示例。您可能想尝试类似“ vis.As [LineChart]()。XAxis.Expression”和“ vis.As [BarChart]()。XAxis.Expression”之类的东西。

from Spotfire.Dxp.Data import *
from Spotfire.Dxp.Application.Visuals import ScatterPlot

scaleType = Document.Properties["LookbackScaleValue"]

for page in Document.Pages:
    if page.Title == "Data Lookback":
        for visual in page.Visuals:
            if "Lookback" in visual.Title:
                if scaleType == "Categorical":
                    visual.As[ScatterPlot]().XAxis.Expression = '<BinByDateTime([TIMESTAMP],"Year.Month.DayOfMonth",2) NEST BinByDateTime([TIMESTAMP],"Hour",0) NEST BinByDateTime([TIMESTAMP],"Minute",0)>'
                elif scaleType == "Continuous":
                    visual.As[ScatterPlot]().XAxis.Expression = '[TIMESTAMP]'
相关问题