Как сделать точечный график в скрипте DM?

У меня есть 2 массива, один содержит координату x, а другой содержит координаты y. Я хочу изобразить эти точки на фигуре в соответствии с этими координатами x и y, например, в виде точечной диаграммы. Можно ли сделать 2D точечный график в скрипте DM? Может ли линейный сюжет сделать это?


person user3688533    schedule 04.03.2016    source источник


Ответы (1)


К сожалению, нет.

DM не обеспечивает отображение неортогональных или разреженных данных.

В зависимости от ваших массивов X/Y вы можете решить эту проблему. Если ваши значения X могут быть представлены как X = offset + var * increment, то вы можете подделать диаграмму рассеяния, создав изображение из (Xmax - offest)/increment пикселей и установив все на ноль, за исключением значений для ваших пар x/y.

Вы можете сделать это и с 2D-изображением. Просто обратите внимание, что обычный 2D-дисплей будет иметь начало координат 0/0 в верхнем левом углу. Чтобы получить более «обычное» отображение, вы можете перевернуть его по вертикали (и настроить калибровку).

Следующий сценарий поясняет, что я имею в виду. Однако в целом я бы сказал, что DM не подходит для такого типа данных.

введите здесь описание изображения

введите здесь описание изображения

image xVals := [5,1]:
{
   { 2.5, 9.75, 5, 10.25, 4 }
}

image yVals := [5,1]:
{
   { 4.25, 3, 8.75, 11, 4.25 }
}

number sampling = 0.25  // Small enough to fit your data to integer!
image xValSampled = trunc( xVals / sampling )
number sizeX = 10 + max(xValSampled) 

image scatterPlot := RealImage( "Scatter (1D)", 4, sizeX)
scatterPlot = 0
scatterPlot[ xValSampled, 0 ] = yVals
scatterPlot.ImageSetDimensionScale(0,sampling)
scatterPlot.ShowImage()


image yValSampled = trunc( yVals / sampling )
number sizeY = 10 + max(YValSampled)

image scatter := RealImage( "Scatter (2D)", 4, sizeX, sizeY )
scatter = 0
scatter.ImageSetDimensionScale(0,sampling)
scatter.ImageSetDimensionScale(1,sampling)
scatter[ xValSampled, yValSampled ] = 1
scatter.ShowImage()
scatter.ImageGetImageDisplay(0).ImageDisplaySetCaptionOn(1)

image scatterInverted := scatter.ImageClone()
scatterInverted.SetName("Scatter (2D) inv.")
FlipVertical(scatterInverted)
scatterInverted.ShowImage()
scatterInverted.ImageGetImageDisplay(0).ImageDisplaySetCaptionOn(1)
scatterInverted.ImageSetDimensionScale(1,-sampling)
scatterInverted.ImageSetDimensionOrigin(1,sizeY*sampling)
person BmyGuest    schedule 04.03.2016
comment
Привет, BmyGuest, твои коды очень полезны. Но у меня есть вопрос. Когда я уменьшаю значение выборки, например. выборка = 0,08, я не вижу белых точек на точечной диаграмме. Я не могу понять, в чем причина этой проблемы... - person user3688533; 10.03.2016
comment
Проверьте, правильно ли установлены пределы отображения изображения. Вероятно, данные настолько скудны, что автоматический обзор пределов исключает значения. Затем все становится черным ... Или ваше окончательное изображение настолько велико, что оно слишком велико для экрана и поэтому отображается с увеличением‹‹1 ? Просто дисплей мог пропустить точки. Хорошей проверкой является суммирование изображений. Если это не ноль, у вас есть баллы :-) - person BmyGuest; 11.03.2016
comment
Привет, BmyGuest, Да, сумма моего изображения не равна нулю, что указывает на то, что у меня есть точки. Я использую imageDisplaySetContrastLimits, чтобы установить его от 0 до 1, и теперь я могу видеть точки! Большое спасибо. - person user3688533; 11.03.2016