Làm thế nào để vẽ một âm mưu trống?


106

Tôi cần thực hiện một âm mưu trống rỗng. Đây là điều tốt nhất tôi có thể nghĩ ra.

plot(0, xaxt = 'n', yaxt = 'n', bty = 'n', pch = '', ylab = '', xlab = '')

Bất kỳ giải pháp đơn giản hơn?

PS: hoàn toàn trống rỗng, không có trục, v.v.

Câu trả lời:


107

Làm thế nào về một cái gì đó như:

plot.new()

@Adam, tôi không biết ý bạn là "R thích hợp".
Joshua Ulrich

@Joshua, xin lỗi plot.new () hoạt động tốt, không cần x11 (). tôi đã nói R thích hợp vì tôi nghĩ x11 () là một phần của giải pháp của bạn, nhưng nó hoạt động mà không có nó.
Adam SO

1
@Adam x11()là lệnh R đa nền tảng để mở một thiết bị mới. Nếu bạn có một thiết bị đang mở và đang gọi plot.new(), thiết bị hiện tại sẽ bị xóa.
Joshua Ulrich

1
Có một lợi thế để x11()vượt qua dev.new()? Bản năng của tôi là đi với cái sau để thích ứng với bất kỳ thiết bị mặc định cục bộ nào, nhưng tôi không chắc đó là cách mọi thứ hoạt động.
Matt Parker

@Matt: Tôi sử dụng x11()do thói quen. Tôi không phải chuyên gia về âm mưu trong R nhưng sau khi xem qua tài liệu, dev.new()có lẽ sẽ tốt hơn.
Joshua Ulrich

63

Tôi đề nghị ai đó cần tạo ra một cốt truyện trống để thêm một số hình ảnh vào đó sau này. Vì vậy, sử dụng

plot(1, type="n", xlab="", ylab="", xlim=c(0, 10), ylim=c(0, 10))

bạn có thể chỉ định các giới hạn trục của đồ họa của bạn.


25

Điều này đơn giản hơn một chút so với giải pháp ban đầu của bạn:

plot(0,type='n',axes=FALSE,ann=FALSE)

Không cần thêm ann=FALSE, dù sao cũng sẽ là vùng trống. Nhưng một giải pháp tuyệt vời, cảm ơn!
MS Berends

22

Phần sau không mô tả bất cứ điều gì trong cốt truyện và nó sẽ vẫn trống.

plot(NULL, xlim=c(0,1), ylim=c(0,1), ylab="y label", xlab="x lablel")

Điều này hữu ích khi bạn muốn thêm các dòng hoặc dấu chấm sau đó trong một forvòng lặp hoặc một cái gì đó tương tự. Chỉ cần nhớ thay đổi giá trị xlimylimgiá trị dựa trên dữ liệu bạn muốn vẽ.

Một lưu ý phụ: Điều này cũng có thể được sử dụng cho các ô Boxplot, Violin và các ô bầy đàn. đối với những người đó, hãy nhớ thêm add = TRUEvào chức năng vẽ biểu đồ của họ và cũng chỉ định xác at =định số bạn muốn vẽ chúng (mặc định là trục x trừ khi bạn đã đặt horz = TRUEtrong các hàm này.


17

Adam, theo nhận xét của bạn ở trên ("Tôi muốn ô trống đóng vai trò điền vào một ô nhiều ô (mfrow)."), Điều bạn thực sự muốn là tùy chọn mfg

    par(mfg=c(row,column))

- điều khiển nơi bạn muốn đặt âm mưu tiếp theo. Ví dụ: để đặt một ô ở giữa ô bội 3x3, hãy làm

    par(mfrow=c(3,3))
    par(mfg=c(2,2))
    plot(rnorm(10))

14

Bạn cần một cửa sổ biểu đồ mới và cả một hệ tọa độ, vì vậy bạn cần plot.new()plot.window()sau đó bạn có thể bắt đầu thêm các phần tử đồ thị:

plot.new( )
plot.window( xlim=c(-5,5), ylim=c(-5,5) )

points( rnorm(100), rnorm(100) )
axis( side=1 )

cốt truyện ví dụ


4

Tuy nhiên, giải pháp của bạn plot.new()vẫn chưa được quan tâm : trong ô trống mà bạn "vẽ", bạn có thể viết văn bản tại các tọa độ được chỉ định text(x = ..., y = ..., your_text).


3
grid.newpage() ## If you're using ggplot

grid() ## If you just want to activate the device.

1
grid()không liên quan đến gói lưới AFAIK
baptiste

2

Nếu ai đó đang tìm ggplot2giải pháp, bạn có thể sử dụng một trong hai cowplothoặc patchworkcác gói

library(ggplot2)

### examples from cowplot vignettes
plot.mpg <- ggplot(mpg, aes(x = cty, y = hwy, colour = factor(cyl))) +
  geom_point(size = 2.5)
plot.diamonds <- ggplot(diamonds, aes(clarity, fill = cut)) + 
  geom_bar() +
  theme(axis.text.x = element_text(angle = 0, vjust = 0.5))

library(cowplot)
### use NULL
plot_grid(plot.mpg, NULL, NULL, plot.diamonds,
  labels = c("A", "B", "C", "D"),
  ncol = 2
)

# Note: if you want to initialize an empty drawing canvas, use ggdraw() 

library(patchwork)
### use plot_spacer()
plot.mpg + plot_spacer() + plot_spacer() + plot.diamonds +
  plot_layout(ncol = 2) +
  plot_annotation(
    title = "Plot title",
    subtitle = "Plot subtitle",
    tag_levels = "A",
    tag_suffix = ")"
  )

Được tạo vào ngày 23 tháng 3 năm 2019 bởi gói reprex (v0.2.1.9000)


1

Một âm mưu trống với một số văn bản được đặt vị trí.

plot(1:10, 1:10,xaxt="n",yaxt="n",bty="n",pch="",ylab="",xlab="", main="", sub="")
mtext("eee", side = 3, line = -0.3, adj = 0.5)
text(5, 10.4, "ddd")
text(5, 7, "ccc")

Tại sao phải thêm văn bản? Điều đó có liên quan gì đến "Làm thế nào để tạo ra một cốt truyện trống?". Nhìn chung, điều này có vẻ phức tạp hơn so với phương pháp của OP trong câu hỏi plot(0,xaxt='n',yaxt='n',bty='n',pch='',ylab='',xlab=''), vì bạn thêm vào main = "", sub = ""thậm chí bạn sẽ nhận được cùng một kết quả mà không có chúng.
Gregor Thomas
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.