Другой вариант заключается в реализации небольшого графического интерфейса, например, с 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) и возможность взаимодействия с пользователем через определенные кнопки (например, у вас может быть кнопка «Приостановить получение»). .