У меня возникают проблемы с использованием grid.edit()
от Rscript
. Я использую grid.edit()
для увеличения толщины полых точек в легенде и диаграмме. Я взял это с этой должности (Change thickness of a marker in ggplot2). Просто выглядит лучше ИМО. Я знаю, что из исходных файлов и Rscripts вы можете получить ggplot
объектов для построения с использованием print(p)
, но мне нужно использовать grid.edit()
, поэтому я не уверен, как это исправить. Ниже приведен рабочий пример.Проблемы с использованием grid.edit() в Rscript
Мой R сценарий называется test.r
library(ggplot2)
library(grid)
library(gtable)
p <- ggplot(mtcars, aes(wt, mpg)) + geom_point(aes(shape = factor(cyl))) + scale_shape(solid = FALSE)
lwd = 2 # Set line width
g = ggplotGrob(p); dev.off() # Get the plot grob
# Get the indices for the legend: t = top, r = right, ...
indices <- c(subset(g$layout, name == "guide-box", select = t:r))
# Get the row number of the legend in the layout
rn <- which(g$layout$name == "guide-box")
# Extract the legend
legend <- g$grobs[[rn]]
# Get the legend keys
pointGrobs = which(grepl("points", legend$grobs[[1]]$grobs))
# Check them out - no line width set
# for (i in pointGrobs) str(legend$grobs[[1]]$grobs[[i]])
# Set line width
for (n in pointGrobs) legend$grobs[[1]]$grobs[[n]]$gp$lwd = lwd
# Check them out - line width set
# for (i in pointGrobs) str(legend$grobs[[1]]$grobs[[i]])
# Put the modified legend back into the plot grob
g$layout$clip[g$layout$name == "panel"] <- "off"
g = gtable_add_grob(g, legend, t=indices$t, l=indices$l)
###g$grobs[[4]]$children[[2]]$gp$lwd = gpar(lwd = lwd) # Alternative for setting lwd for points in the plot
grid.newpage()
grid.draw(g)
grid.edit("geom_point.points", grep = TRUE, gp = gpar(lwd = lwd))
dev.print(cairo_pdf,filename="Aplot.pdf",
width=11,
height=8.5)
Мой командный файл.
...\R-3.2.3\bin\x64\Rscript.exe test.r
PAUSE
Сценарий запускается, и я получаю следующую ошибку.
Error in editDLfromGPath(gPath,specs,strict,grep,global,redraw):
'gPath' (geom_point.points) not found
Calls: grid.edit -> editDLfromGPath
Execution halted
дополнительно PDF печатается в моей рабочей директории под названием Rplots
. Этот график является размером по умолчанию, и интересно, что точки в легенде толстые, но точек в сюжете нет. Похоже, что сценарий завершается с ошибкой grid.edit()
, но grid.draw()
преуспевает.
Я построил Rscript данным периодического процесса и производить набор графиков. Я хочу распространять это на других людей в моем офисе, которые не знают R. Любой, у кого есть подключение к сетевому диску, может запускать скрипт с их локального компьютера, и скрипт будет обрабатывать файлы в каталоге пакетного файла. Могу ли я использовать Rterm и создать Rprofile, который управлял командами напрямую или использовал 'source()' в начале сеанса R, чтобы получить тот же результат или будет использовать 'source()' для запуска в те же проблемы? – CCurtis
Попробуйте это: добавьте 'grid.force()' непосредственно перед 'grid.edit (....' line. 'Grid.force()' делает grob видимыми для функций редактирования сетки. Без 'grid.force() ', функции редактирования видят только один grob. –
Он избавился от ошибки, но результат в том же. Не похоже, что grid.edit выполняет свою работу. Спасибо, полезно знать. Думаю, я мог бы попытаться создать shiny app – CCurtis