代码从命令行启动:图形设备空白

时间:2016-05-12 07:31:44

标签: r plot ggplot2 device graphic

我有一个必须在命令行中运行的代码。如果我从RStudio一块一块地运行它,它可以正常工作。当我从命令行运行它时,它会打开图形设备,但它仍然是空白的。

require(ggplot2)
#ds <- head(SOM_dist_tot)
num <- 6
ds <- c(1.00566799, 0.81354614, 0.36507594, 0.15541231, 0.13957369, 0.06986632)

vett <- as.data.frame(ds)
pdf("ggplot_test.pdf")
  gioele <-ggplot(vett, aes(x= as.numeric(rownames(vett)), y =vett$ds))+
           geom_point(size=2) + xlab("X") + ylab("Y")+
           ggtitle("...")+
           theme(axis.text.x = element_text(angle=-45, hjust=0, vjust=1), 
                 plot.margin = unit(c(1, 1, 1, 1), "cm"), 
                 plot.title = element_text(size = 20, face = "bold", colour = "black", vjust = -1))
  #print(gioele)
  plot(gioele)
dev.off()

print(gioele)

inputFromUser <- as.numeric(readLines(file("stdin"),1))

dev.off()

我想显示图形“gioele”,例如向用户提供信息。然后用户选择要插入的命令(inputFromUser),然后窗口必须关闭。 你有什么想法吗?

1 个答案:

答案 0 :(得分:0)

经过很多痛苦后我才明白这个问题:它是readLines()和图形设备之间的冲突。换句话说,它正确地打开了绘制图形的设备,但随后readLines(...)使图形设备变为空白(我不知道它在技术上是如何可能的)。

我找到了删除readLines()并使用更正确readline()的解决方案。

require(ggplot2)
#ds <- head(SOM_dist_tot)
num <- 6
ds <- c(1.00566799, 0.81354614, 0.36507594, 0.15541231, 0.13957369, 0.06986632)


pdf("plot_test.pdf")
  plot(ds[1:num], type="p", xlab="X", ylab="Y", col="red")
  title(main="...", sub = "...", line=-1.2, cex.sub = 0.75, font.sub = 3, col.sub = "red")
dev.off()
#cat("Faccio il plot")
# plot(ds[1:num], type="p", xlab="X", ylab="Y", col="red")
# title(main="...", sub = "...", line=-1.2, cex.sub = 0.75, font.sub = 3, col.sub = "red")


vett <- as.data.frame(ds)
pdf("ggplot_test.pdf")
  gg2 <-ggplot(vett, aes(x= as.numeric(rownames(vett)), y =vett$ds))+
    geom_point(size=2) + xlab("X") + ylab("Y")+
    ggtitle("...")+
    theme(axis.text.x = element_text(angle=-45, hjust=0, vjust=1), 
          plot.margin = unit(c(1, 1, 1, 1), "cm"), 
          plot.title = element_text(size = 20, face = "bold", colour = "black", vjust = -1))
  #print(gg2)
  plot(gg2)
dev.off()

print(gg2)

#inputFromUser <- as.numeric(readLines(file("stdin"),1))
inputFromUser <- as.numeric(readline())

dev.off()