2011-10-19 26 views
8

renkli hale hücreler aşağıdakileri yapmanız mümkündür:Koşullu biçimlendirme:

loc1 <- c("Aa", "Aa", "aa", "Aa") 
loc2 <- c("aa", "aa", "aa", "AA") 
loc3 <- c("aa", "Aa", "aa", "aa") 
gen <- data.frame(loc1, loc2, loc3) 

loc1g <- c(0.01, 0.5, 1, 0.75) 
loc2g <- c(0.2, 0.1, 0.2, 0.6) 
loc3g <- c(0.8, 0.8, 0.55, 1) 
pval <- data.frame(loc1g, loc2g, loc3g) 

Ben koşullu PVAL dataframe tarafından biçimlendirilir gen dataframe bir dosyaya böyle bir yol yazdırmak istiyorum. Gen rengin (row1, col1) 'den daha fazlası, pvale (row1, col1)' e bağlıdır. Aşağıdakiler renk kodlaması:

0 to 0.3 is "red" text color 
0.31 to 0.7 is "yellow" 
> 0.7 is "red" 

gen [1,1] kırmızı metin renk basılabilir ve benzeri ....

yardımına takdir "Aa" olacaktır.

DÜZENLEMELER:

Ben grafikte komplo değil baskı daha fazla ilgi duyuyorum. MS excel olarak çıktı kaydedebilir ve MSEXCEL içinde açabilirseniz harika olurdu. Renk kodlu metni okuyabilen diğer metin editörü formatları da olabilirim. Benim orjinal veri matrisinin 1000 x 1000 veya daha fazla bir boyutta olması gerekir. Her gen kategorisi için birleşen p-değerini çabucak bilmek isterim.

+2

Aklında ne tür bir dosya vardı? Biri bunu birkaç seçenek olarak göstermek için bir grafik, bir lateks dosyası veya Excel olarak yapabilir. – Andrie

+0

Ayrıca açıklığa kavuşturmak için, etkileşimli bir R oturumundaki çıktı gibi düz metinde bunu yapamazsınız. Düz metinde renkler yok ... – Harlan

+0

Tabloyu bir çeşit işaretleme diliyle oluşturabilirsiniz (bkz. Örneğin, "ascii" paketi), ancak hazırlıklı olun: temel R konsolu/GUI/IDE ayrıştırılamayacak/Bunu renklendir. HTML/LaTeX/xls başka bir seçenek olabilir. – daroczig

cevap

4

çirkin döngü değil en güzel tasarım kullanarak bir POC benzeri bir cevap verilmesi Örneğin. xlxs paket Excel 2007 biçimini yazabilmek için: (! Kılavuzuna bakın)

library(xlsx) 

bize çalışma kitabı ve bir levha yaratalım:

wb <- createWorkbook() 
sheet <- createSheet(wb, "demo") 

elektronik tabloda kullanmak için bazı stilleri tanımlayın :

red <- createCellStyle(wb, fillBackgroundColor="tomato", fillForegroundColor="yellow", fillPattern="BIG_SPOTS") 
yellow <- createCellStyle(wb, fillBackgroundColor="yellow", fillForegroundColor="tomato", fillPattern="BRICKS1") 

ve uygun biçimde olan elektronik tabloya her hücre yapıştırma çirkin döngü:

Excel dosyasını kaydetme:

saveWorkbook(wb, '/tmp/demo.xls') 

Sonuç:

ascii.data.frame() yeteneği ile biçimlerinin bir grup veri çerçeveleri verebilirsiniz: paketiyle ascii ile demo.xls


Alternatif çözüm bazı biçimlendirme ekleme. Örneğin.veri çerçevesini

options(asciiType = "pandoc") 

ve dışa:

style <- matrix('d', dim(pval)[1], dim(pval)[2]) 
style[pval < 0.3 | pval > 0.7] <- 's' 

İstenen çıkış: Pandocihracat, ilk pval aynı boyutlara sahip bir dizi için her hücre stilleri tanımlamak

> ascii(gen, style=cbind('h', style)) 

    **loc1** **loc2** **loc3** 
--- ---------- ---------- ---------- 
1 Aa   **aa**  **aa**  
2 **Aa**  **aa**  Aa   
3 **aa**  aa   **aa**  
4 **Aa**  **AA**  **aa**  
--- ---------- ---------- ---------- 

ascii::Report ile kolayca pdf, odt veya html dönüştürebilirsiniz. Sadece HTML ile çıkışını Küçük demo :) deneyin: result

r <- Report$new() 
r$add(section("Demo")) 
r$add(ascii(gen, style=cbind('h', style))) 
options(asciiType = "pandoc") 
r$backend <- "pandoc" 
r$format <- "html" 
r$create() 

Ve odt çıkışı: result

r$format <- "odt" 
r$create() 
+0

+1. – Andrie

5

Excel'i taklit etmek istediğiniz gibi görünüyor. İşte birkaç örnek:

Yükleme:

x = 1:ncol(pval) 
y = 1:nrow(pval) 

# Colored backgrounds 
dev.new(width=4, height=4) 
image(x, y, t(as.matrix(pval)), 
    col = c('red', 'yellow', 'red'), 
    breaks = c(0, 0.3, 0.7, 1), 
    xaxt='n', 
    yaxt='n', 
    ylim=c(max(y)+0.5, min(y)-0.5), 
    xlab='', 
    ylab='') 
centers = expand.grid(y, x) 
text(centers[,2], centers[,1], unlist(gen)) 

enter image description here

# Colored text 
dev.new(width=4, height=4) 
image(x,y, matrix(0, length(x), length(y)), 
    col='white', 
    xaxt='n', 
    yaxt='n', 
    ylim=c(max(y)+0.5, min(y)-0.5), 
    xlab='', 
    ylab='') 
pvals = unlist(pval) 
cols = rep('red', length(pvals)) 
cols[pvals>0.3 & pvals<=0.7] = 'yellow' 
text(centers[,2], centers[,1], unlist(gen), col=cols) 
grid(length(x),length(y)) 

enter image description here

+0

Teşekkür ederim, bunu yapmak ilginç görünüyor ... kısmen görmek istiyorsanız kısmi çözüm olabilir. Lütfen son zamanlarda yaptığım değişikliklere bakın, grafikten ziyade daha fazla metin tabanlı çıktı baskısı ile ilgileniyorum. Hayal gücüm, excelde yapabileceğimiz bir şey yapmaktı. diğer matris. "Ascii" ve "pandoc" örnekleri için – jon

2

Eğer gerçekten bunu yapmak istiyorsanız (için Joris yorumuna @ bakın daha iyi bir yol), Excel'i hendekleyip LaTeX'te denemenizi şiddetle tavsiye ederim.ile birlikte R paketini xtable kullanın.

Avantajları:

  • Pretty baskı
  • Hayır Excel sorunlarını (Excel'e verme kolaydır; Excel'e verme biçimlendirme koruyarak çok zor iken, ve hatalar için bir reçete)

Dezavantajları :

  • OExcel
  • değil 210
  • Renklerin xtable ile çalışmasını sağlamak için muhtemelen biraz iş gerekir. Ancak, bunu yalnızca bir kez yapmanız gerekir ve sonra sonsuza kadar çalışır - işlevinizi bir pakette serbest bırakabilir veya paketine eklenmek üzere xtable destekleyicilere gönderebilir ve herkesi beladan kurtarırsınız.