Участок к конкретному участку в окне с несколькими участками? - PullRequest
9 голосов
/ 30 июня 2010

Если я создаю окно с несколькими участками с par(mfrow=...), возможно ли отправить данные на конкретный график (т. Е. «В нижнем левом углу») или график всегда обязательно последовательный?Есть ли пакет для R, который делает что-то подобное?

Для тех, кто заинтересован, эта проблема возникает из-за того, что R является однопоточным приложением и не идеально подходит для визуализации в реальном времени.У меня есть несколько потоков данных в реальном времени, поступающих в R из внешнего источника, который создает данные асинхронно (и, следовательно, потоки данных не всегда приходят в одном и том же порядке).В результате R переворачивает порядок графиков визуализации данных при каждом обновлении.

Ответы [ 4 ]

11 голосов
/ 30 июня 2010

Вы можете использовать split.screen():

par(bg = "white") # erase.screen() will appear not to work
                  # if the background color is transparent 
                  # (as it is by default on most devices).
split.screen(c(2,1)) # split display into two screens
split.screen(c(1,3), screen = 2) # now split the bottom half into 3
screen(1) # prepare screen 1 for output
plot(10:1)
screen(4) # prepare screen 4 for output
plot(10:1)
3 голосов
/ 30 июня 2010

Посмотрите на help(layout).Это позволяет вам указать, что, где и в каких размерах.

После построения я не думаю, что вы перенастраиваете только частичноНо вы можете использовать dev.set() и др. Для переключения между различными «графическими устройствами» (т.е. окнами);см help(dev.list).

2 голосов
/ 03 июля 2013

Обратите внимание, что предлагаемый ответ здесь заключается в использовании split.screen ().Это может работать, но в соответствии с файлом справки split.screen: «Рекомендуемый способ использования этих функций - полностью нарисовать график и все добавления (т. Е. Точки и линии) к базовому графику до выбора и построения графика на другом экране. Поведение, связанное с возвратом к экрану для добавления к существующему графику, непредсказуемо и может привести к проблемам, которые не всегда видны.параметр par (mfg):

Изменить панель графика на многоканальном графике в R

1 голос
/ 30 июня 2010

Другой вариант заключается в реализации небольшого графического интерфейса, например, с RGtk2 или RTclTk.

Обычно я делаю это для графиков, которые я хочу изменить в реальном времени, и это прекрасно работает.

Например, с RGtk2 и cairoDevice вы можете просто сделать что-то вроде (я предполагаю, что у вас есть интерфейс Glade)

# Helper function to get a widget from the Glade interface
getWidget <- function(name)
 {
 return (interface$getWidget(name))
 }

interface <- gladeXMLNew("interface.glade", root="mainWindow")
# Our cairo devices (to draw graphics).
# plot1, plot2, and plot3 are GtkDrawingArea widgets 
asCairoDevice(getWidget("plot1"))
# dev.cur() will give the device number of the last device we created
# You'll use this to switch device when you draw in different plots
# Storing the device number is important because you may have other
# devices open from other unrelated plots 
# (so never assume they'll just start from 1 and be sequential!!!)
plot1.dev <- as.integer(dev.cur())
asCairoDevice(getWidget("plot2"))
plot2.dev <- as.integer(dev.cur())
asCairoDevice(getWidget("plot3"))
plot3.dev <- as.integer(dev.cur())

# To draw in a specific plot you just do
dev.set(plot2.dev)
plot(....)

У этого есть много других преимуществ, например, возможность легко размещать графики в нужном вам месте (с помощью Glade Interface Designer) и возможность взаимодействия с пользователем через определенные кнопки (например, у вас может быть кнопка «Приостановить получение»). .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...