2017-01-09 61 views
0

我有data.frame列表,其列名稱相當複雜的字符串,並且需要使用facet_wrap作圖。我打算操縱這個複雜的字符串和陰謀在facet_grid。我有一些想法,使用\n分割字符串,但在結果圖中,我所需的標籤仍未完全顯示。任何人都可以給我一些想法如何繪製data.frame如果標籤用長字符命名的列?我怎樣才能達到我想要的情節?如何獲得用意外的長模式命名的data.frame的`facet_wrap`圖?

重複性data.frame:

myList <- list(
    wmTncofSydhTfbsK90cmxcgMnP30SxEAlnTest1.saved= 
     data.frame(GRP=c("up","up","down"), Name=rep("wmTncofSydhTfbsK90cmxcgMnP30SxEAlnTest1", 3), 
        v1=c(2,7,9)), 
    wmTncofSydhTfbsK90cmxcgMnP30SxEAlnTest2.saved= 
     data.frame(GRP=c("up","down","up","down"), Name=rep("wmTncofSydhTfbsK90cmxcgMnP30SxEAlnTest2", 4), 
        v1=c(13,8,11,3)) 
) 

這是我的想象力所希望的描繪:

enter image description here

我怎樣才能得到這所希望的描繪?如果以意想不到的長字符命名,如何繪製data.frame?在此先感謝

編輯: 門檻越來越updown組,我們可以設置門檻threshold >9up;否則爲down。對於這個缺失點感到抱歉。

但我怎麼能繼續這段代碼,我試圖操縱數據中的長字符串列?任何人都可以指出我如何繼續我的方法並製作出我想要的情節?

+0

你試過manuall在字符串中加入'\ n'字符嗎? – AlexR

+0

@AlexR是的,我試過'\ n',也許我在準備繪圖數據時做了錯誤的事情。我試着首先獲取單個數據幀,然後在其列中處理該長字符串,然後繪製它們。但我無法制作出我想要的情節。請任何想法嗎?謝謝:) – Jerry

+0

你可以發佈一些C&P代碼,這樣我就可以準確地知道你的'data.frame'的樣子了嗎?我沒有添加任何問題'\ n'。它會像預期的那樣創建一個換行符並將兩個部分集中在一起 – AlexR

回答

2

下面是一些示例代碼通過分離柱A到至多26個字符的線來解決此問題:

library(stringr) 
library(ggplot2) 
df <- data.frame(A = c(paste(rep(LETTERS, 3), collapse = ""), paste(rep(letters, 3), collapse = "")), B = 3) 
ggplot(df, aes(x = B)) + facet_wrap(~A) + geom_bar() 
while(any(str_detect(df$A, "(?<=(^|\\n))[\\n]{26}(?=[^\\n])"))) { 
    df %<>% mutate(A = str_replace(A, "(?<=(^|\\n))[\\n]{26}(?=[^\\n])", "\\0\n")) 
} 
ggplot(df, aes(x = B)) + facet_wrap(~A) + geom_bar() 

核心是反覆更換正則表達式模式(?<=(^|\n))[^\n]{26}(?=[^\\n])至極相匹配的26個字符(選擇根據您自己的判斷)長度子字符串不會立即由換行符繼承,並且以字符串的開頭或換行符開頭。

我建議單步穿過while循環來了解正則表達式的工作原理。

相關問題