2013-01-03 49 views
7

Tôi muốn có tiêu đề cho cốt truyện trong hai dòng, nhưng điều này không hoạt động, tại sao? và làm thế nào tôi có thể làm cho nó hoạt động?Tiêu đề chính trong hai dòng

CVal<-1 
SumEpsVal<-2 
plot(1:10, main=bquote(paste("C=", .(CVal), " \n ", sum(xi), "=", .(SumEpsVal)))) 

này đây hoạt động:

plot(1:10, main=paste("C=1", "\n", "SumXi=2")) 

Tôi đoán bquote làm gì đó sai ... Tôi cố gắng để thay đổi môi trường trong bqoute (nơi có đối số) nhưng tôi don (nhìn lên bquote?) 't biết môi trường để có.

BTW:

plot(1:10, main=bquote(paste("C=", .(CVal), "bla \n ", sum(xi), "=", .(SumEpsVal)))) 

làm một cái gì đó điên với "bla".

Trả lời

10

Vấn đề gốc là âm mưu không hỗ trợ dòng mới trong các biểu thức sẽ được xuất.

Control characters (e.g. \n) are not interpreted in character strings in plotmath, 
    unlike normal plotting. 

Bạn thực sự cần tạo và xuất riêng từng dòng.

Ví dụ:

Lines <- list(bquote(paste("C=", .(CVal))), 
       bquote(paste(sum(xi), "=", .(SumEpsVal)))) 

Bây giờ sản lượng mỗi dòng Các văn bản trong danh sách được chuyển thành biểu do.call

mtext(do.call(expression, Lines),side=3,line=0:1) 

enter image description here

4

Một cách để đạt được điều này là sử dụng mtext để thêm một dòng bổ sung dưới tiêu đề chính như sau:

plot(1:10, main=bquote(paste("C=", .(CVal)))) 
mtext(bquote(paste(sum(xi), "=", .(SumEpsVal))),side=3,line=0) 

Có thể có một giải pháp đẹp hơn, nhưng có lẽ đây là đủ cho nhu cầu của bạn.

11

Cá nhân tôi sẽ sử dụng mtext như đã đề xuất . Nhưng nếu bạn thực sự muốn nó được một lớp lót, bạn có thể "ăn gian" bằng cách sử dụng bquoteatop:

plot(1:10, main= 
    bquote(atop(paste("C=",.(CVal)), paste(sum(xi),"=",.(SumEpsVal))))) 

Nó thậm chí gắn cả hai dòng gọn gàng đến trung tâm.

Các vấn đề liên quan