2013-11-21 22 views
3

這很清楚How to label panels in lattice使用panel.textltext參數。但是,如果我想爲格子中的每個面板使用不同的獨特標籤,該怎麼辦?讓我來說明這個簡單的Dotplot我的觀點:向格子中的每個面板添加不同的唯一標籤

library(Hmisc) 
#example data 
data <- data.frame(transport=rep(c("bicycle","bus"),each=2), 
        att=rep(c("behaviour control","intention"),2), 
        value=c(4.134,4.5,3.77,2.4), Lo=c(3.92,4.37,3.51,2.2), 
        Hi=c(4.34,4.62,4.02,2.61)) 
#labels I want to use 
labels.hi=c("likely","easy") 
labels.lo=c("unlikely","difficult") 
#example dotplot 
png("test.png",width=300, height=400) 
Dotplot(transport ~ Cbind(value, Lo, Hi) | att, data, col=1, 
     panel = function(x, y,...) { 
      panel.Dotplot(x, y,...) 
      ltext(2.5,1.5, labels=labels.lo) 
      ltext(4.5,1.5, labels=labels.hi) 
     }) 
dev.off() 

此代碼給我下面的情節:

enter image description here

上面板得到一個正確的標籤(「不可能」和「可能」) ,但下面板只是複製了上面的面板標籤。相反,我想繪製下面板中剩餘的標籤(「簡單」,「困難」),但與上面的面板位於同一位置。

我知道我可以分別使用每個標籤的ltext參數來定義每個標籤,但考慮到我的「真實生活」情節(heh)有更多面板和更多不同的獨特標籤,這是非常不切實際的解決方案。有什麼建議麼?格子只請。

回答

3

我不agstudy該標會是一個很好的索引策略達成一致。在這種情況下,他們偶然工作,因爲您的積分與標籤的數量相同且順序相同。下標是爲面板挑選單個數據點的機制,而不是索引面板的機制。考慮使用packet.number()panel.number()函數。在這種情況下,我相信他們返回相同的數值,而應諮詢他們共同幫助頁面,如果你心裏有更復雜的制約因素:

Dotplot(transport ~ Cbind(value, Lo, Hi) | att, data, col=1, 
     panel = function(x, y,...) { 
      panel.Dotplot(x, y,...) 
      if(packet.number()==1){ ltext(c(2.5,4.5) ,1.5, labels= labels.lo)} 
      if(packet.number()==2){ ltext(c(2.5,4.5) ,1.5, labels=labels.hi)} 
     }) 

如果你在一個矩陣有你的標籤,這本來是很容易使用的索引與「[」。

lab.mat=matrix(c(labels.hi,labels.lo), 2) 
lab.mat 
#  [,1]  [,2]  
#[1,] "likely" "unlikely" 
#[2,] "easy" "difficult" 

png("test.png",width=300, height=400) 
Dotplot(transport ~ Cbind(value, Lo, Hi) | att, data, col=1, 
     panel = function(x, y,...) { 
      panel.Dotplot(x, y,...) 
      { ltext(c(2.5,4.5) ,1.5, labels= lab.mat[packet.number(),])} 
     }) 
dev.off() 

enter image description here

+0

是的,確切地說。我有同樣的想法,儘管我傾向於將每個數據包標籤放在一個列表中,並由'packet.number()'索引。如果使用多個條件變量,我可以通過'which.packet()'將標籤保存在一個'matrix(list())'或'array(list())'對象中。 –

+0

我不確定我是否還可以欣賞列表矩陣相對於字符元素矩陣(或數組)的優點。 –

+0

不確定*有多大優勢,儘管如果某些數據包所包含的內部標籤數量不同,列表*會更好。但是,真的,我只是在敘述我的想法,並指出儘管我們的想法非常類似,但有一種(稍微)替代方法。 –

2

我認爲你正在尋找subscripts參數:(很高興見到良好的晶格問題)

labels=c("likely","easy","unlikely","difficult") 
#example dotplot 
Dotplot(transport ~ Cbind(value, Lo, Hi) | att, data, col=1, 
     panel = function(x, y,subscripts,...) { 
      panel.Dotplot(x, y,...) 
      ltext(c(2.5,4.5),1.5, labels[subscripts]) 
     }) 

enter image description here

0

我沒有足夠的信譽分置評,但我想補充一個小的調整,建立關@ 42-對於那些POSIXct日期的工作。注意:我不是開發人員,編碼人員或聲稱這將適用於每個數據集/用戶 - 這只是我需要的破解。

如果您需要在使用x軸上的日期時向多個圖表添加文本,則必須將as.POSIXct函數添加到指定文本位置的指定日期。我還包括panel.xyplot來演示,因爲您必須指定您正在使用的繪圖類型。在這個例子中,我在每個面板上放置了兩個標籤(在OP示例中預先指定),在同一個y上的兩個面板上。

例子:

panel = function(x, y,...) { 
    panel.xyplot(x, y,...) 
    if(packet.number()==YOUR 1ST PANEL){ ltext(c(as.POSIXct("YOUR 1ST DATE"), as.POSIXct("YOUR 2ND DATE")), YOUR Y VALUE, labels = YOUR LABELS)} 
    if(packet.number()==YOUR 2ND PANEL){ ltext(c(as.POSIXct("YOUR 1ST DATE"), as.POSIXct("YOUR 2ND DATE")), YOUR Y VALUE, labels = YOUR LABELS)} 
}) 

希望這能使用的人的。乾杯。

相關問題