Подтвердить что ты не робот

Spotfire получить название решетчатой ​​панели

Предположим, что у меня есть визуализация, которая решена панелью с помощью некоторой категориальной переменной, с одной панелью на странице. Я хотел бы перебрать панели и экспортировать каждое изображение в файл с именем файла, соответствующим категориальной переменной.

Экспорт изображений работает полностью, следуя некоторым опубликованным примерам. Тем не менее, у меня много проблем с получением имени текущей панели, чтобы я мог правильно назвать изображение.

Здесь мой код:

from Spotfire.Dxp.Application.Visuals import VisualContent
from System.Drawing import Bitmap, Graphics, Rectangle, Point
from System.IO import Path
import re

vc=viz.As[VisualContent]() #viz is the visualization parameter passed to the script
trellis=vc.Trellis

originalIndex=trellis.ActivePageIndex

outputDir=Document.Properties["imageOutputDir"]

for i in range(trellis.PageCount):
    #move to the right page
    trellis.ActivePageIndex=i

    #make the actual image - 
    viz_r = Document.ActivePageReference.GetVisualBounds(viz)
    width=viz_r.Width
    height=viz_r.Height
    bm = Bitmap(width,height)
    g = Graphics.FromImage(bm)
    g.TextRenderingHint = g.TextRenderingHint.AntiAlias
    r=Rectangle(0, 0, width,height)
    vc.Render(g, r)

    #save the image

    name="%d"%i
    #here we would like to instead get the current value of the trellis variable!
    #name=?

    clean_name=re.sub(r'[/\\:*?"<>|]', '_',name)
    tempFilename = outputDir+"\\%s.png"%clean_name
    bm.Save(tempFilename)
    print "image saved as " + tempFilename

trellis.ActivePageIndex=originalIndex

Я, казалось бы, просмотрел все методы VisualContent и Trellis и не нашел его.

Альтернативой является цикл данных и просто получить значения категориальной переменной. Однако порядок не обязательно сохраняется, поэтому это не работает. Если я могу получить только данные, соответствующие каждой панели решетки, конечно, я мог бы с этим справиться.

4b9b3361

Ответ 1

Я обыскал и обыскал несколько раз и, наконец, обратился к поддержке TIBCO. к сожалению, нет доступа к заголовкам решетки.

Ответ 2

Вот то, с чем я закончил. Кажется, что это работает, когда переменная имеет тип string и сортируется как standard sort order for datatype.

Если кто-то может сделать сортировку более надежной, она, безусловно, будет оценена. Я, по сути, должен был определить буквенно-цифровую сортировку, используемую пятнистостью, загружая текстовые данные и проверяя сортировку. Вероятно, я забыл несколько персонажей - сейчас это работает для моих данных.

Я не смог получить доступ к методу TryGetCustomSortOrder, предложенному Niko - я работаю в Spotfire 6.5, и он стал доступен только в 7.0

from Spotfire.Dxp.Application.Visuals import VisualContent
import Spotfire.Dxp.Data.DataTable
from Spotfire.Dxp.Data import *
from System.Drawing import Bitmap, Graphics, Rectangle, Point
from System.IO import Path
import re

vc=viz.As[VisualContent]()
trellis=vc.Trellis
name_column=trellis.PanelAxis.Expression.Trim('<').Trim('>').Trim('[').Trim(']')
#get the unique column values
myTable = Document.ActiveDataTableReference
rowCount = myTable.RowCount
rowsToInclude = Document.ActiveFilteringSelectionReference.GetSelection(myTable).AsIndexSet()
cursor1 = DataValueCursor.Create(myTable.Columns[name_column])

S=set()
for row in myTable.GetRows(rowsToInclude,cursor1):
    x=cursor1.CurrentDataValue.Value
    if x not in S:
        S.add(x)
L=list(S)

alphabet=r' _-,;:!.\'"(){}@*/\&#%`^+<=>|~$0123456789abcdefghijklmnopqrstuvwxyz'

L=sorted(L,key=lambda s:[alphabet.index(c) if c in alphabet else -1 for c in s.lower()])
#things not in alphabet probably unicode characters that get sorted to the beginning

originalIndex=trellis.ActivePageIndex
outputDir=Document.Properties["imageOutputDir"]

for i,name in enumerate(L):
    trellis.ActivePageIndex=i
    viz_r = Document.ActivePageReference.GetVisualBounds(viz)
    width=viz_r.Width
    height=viz_r.Height
    bm = Bitmap(width,height)
    g = Graphics.FromImage(bm)
    g.TextRenderingHint = g.TextRenderingHint.AntiAlias

    r=Rectangle(0, 0, width,height)
    vc.Render(g, r)

    clean_name=re.sub(r'[/\\:*?"<>|]', '_',name)
    tempFilename = outputDir+"\\%s.png"%clean_name
    bm.Save(tempFilename)
    print "image saved as " + tempFilename

trellis.ActivePageIndex=originalIndex