[英]How can I get `facet_wrap` plot for the data.frame named with unexpected long pattern?
我有data.frame列表,其中的列用相當復雜的字符串命名,需要使用facet_wrap
進行繪制。 我打算操縱這個復雜的字符串並在facet_grid
中進行facet_grid
。 我有一些使用\\n
分割字符串的想法,但是在結果圖中,我所需的標簽仍然沒有完全顯示出來。 如果用長字符命名的列被標簽,誰能給我一些想法如何繪制data.frame? 如何獲得理想的情節?
可復制的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))
)
這是我想象中的理想情節:
我怎樣才能得到這個理想的情節? 如果data.frame以意外的長字符命名,該如何繪制? 提前致謝
編輯 :門檻越來越up
, down
組,我們可以設定的閾值threshold >9
的up
; 否則down
。 對於這個遺漏的地方感到抱歉。
但是,如何在試圖操縱數據中的長字符串列的地方繼續執行此代碼? 誰能指出我如何進行我的方法並制作出我想要的情節?
下面是一些示例代碼,可通過將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個字符(請自行選擇)長度子字符串wich不會立即由換行符接續,而是以字符串開頭或換行符開頭。
我建議逐步執行while
循環以了解正則表達式的工作原理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.