2016-11-08 90 views
3

我有一個熱圖,其中一個標籤是用「,」分隔的兩個詞的刺。我希望在保留前綴字體不變的情況下,對標籤的後綴進行斜體顯示。我意識到存在一些解決類似問題的問題,如果這是一個重複的問題,我表示歉意,但我一直無法將這些問題的任何解決方案應用於我的特定問題。在R中斜體標繪的後綴

我有下面的代碼生成我的情節:

ggplot(mockdata, aes(variable, Measurement)) + 
    geom_tile(aes(fill = mockdata$plotval), colour = "dark red") + facet_grid(category~type, scales='free', space='free') + scale_fill_gradient2(limits=c(-20, 20),high = "firebrick3", low = "dodgerblue4") + 
    theme_minimal() + theme(axis.text.x=element_text(size=28, angle=90), axis.text.y=element_text(size=28)) + 
    labs(title="", x="", y="", fill="") + theme(strip.text.x=element_blank(),strip.text.y=element_text(size=20, angle=0)) 

enter image description here

我想前綴(這裏許多23:42,但實際上字符串)保持不變,同時設置後綴用斜體表示。我怎麼能做到這一點? (我應該注意,我也有我的數據框中只有前綴或只有後綴的列,所以像表達式(粘貼(column1,italics(column2),sep =「」))可以工作,雖然它不適合我至今)。

這裏是重複性的數據:

dput(mockdata) 
structure(list(Measurement = structure(c(42L, 41L, 40L, 39L, 
38L, 37L, 36L, 35L, 34L, 33L), .Label = c("1, italic_suffix", 
"2, italic_suffix", "3, italic_suffix", "4, italic_suffix", "5, italic_suffix", 
"6, italic_suffix", "7, italic_suffix", "8, italic_suffix", "9, italic_suffix", 
"10, italic_suffix", "11, italic_suffix", "12, italic_suffix", 
"13, italic_suffix", "14, italic_suffix", "15, italic_suffix", 
"16, italic_suffix", "17, italic_suffix", "18, italic_suffix", 
"19, italic_suffix", "20, italic_suffix", "21, italic_suffix", 
"22, italic_suffix", "23, italic_suffix", "24, italic_suffix", 
"25, italic_suffix", "26, italic_suffix", "27, italic_suffix", 
"28, italic_suffix", "29, italic_suffix", "30, italic_suffix", 
"31, italic_suffix", "32, italic_suffix", "33, italic_suffix", 
"34, italic_suffix", "35, italic_suffix", "36, italic_suffix", 
"37, italic_suffix", "38, italic_suffix", "39, italic_suffix", 
"40, italic_suffix", "41, italic_suffix", "42, italic_suffix" 
), class = c("ordered", "factor")), category = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L), .Label = c("x1", "x2", "x3", 
"x4", "x5", "x6", "x7", "x8", "x9"), class = "factor"), variable = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("A", "B", "C", 
"a", "b", "c", "d", "e", "f"), class = "factor"), Pval = c(2.47889266743109e-11, 
3.57296480818891e-12, 2.95428165629922e-21, 6.55646318564946e-12, 
0.00140846156326513, 0.00504059407383829, 0.239272686561618, 
0.146388841964746, 0.0193041667726786, 34.6978854862654), effect = c(1.40367296123877, 
0.267565311381035, 0.157909806505032, 0.117848801449174, 0.139575361152878, 
0.153551445281832, 0.254959981281264, 0.0635385821595322, 0.0832431045850506, 
0.010863571087271), direction = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 
1), plotval = c(10.6057422771658, 11.4469712613471, 20.5295481021367, 
11.1833303729987, 2.85125500035703, 2.29751827550182, 0.62110687410944, 
0.83449202476544, 1.71434893912345, -1.54030300938373), type = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("Individual", 
"Composite"), class = "factor"), `NA` = list(c("rs188468174", 
" RUNX3"), c("rs35668054", " CYP26B1"), c("rs968567", " FADS2" 
), c("rs9276244", " HLA-DQA2"), c("rs10065637", " ANKRD55"), 
    c("rs1071888", " ASCC2"), c("rs142973694", " MICA"), c("*rs3815768", 
    " ELL2"), c("rs3184504", " SH2B3"), c("rs2926468", " FCGR3B" 
    )), `NA` = c(" RUNX3", " CYP26B1", " FADS2", " HLA-DQA2", 
" ANKRD55", " ASCC2", " MICA", " ELL2", " SH2B3", " FCGR3B")), .Names = c("Measurement", 
"category", "variable", "Pval", "effect", "direction", "plotval", 
"type", NA, NA), row.names = c(NA, 10L), class = "data.frame") 
+0

你嘗試過什麼是不適合你?它看起來很像[this](http://stackoverflow.com/questions/39282293/r-ggplot2-using-italics-and-non-italics-in-the-same-category-label?rq=1) – Haboryme

+0

謝謝,這接近於做伎倆,但事實是,scale_y_discrete不起作用。在我的模擬數據中不是很清楚,但我的情節分解成網格。由於我使用的是facet_grid,因此它將每個網格標記爲相同,即它重新開始命名。 – Sigurgeir

+0

我嘗試了建議的解決方案,但確實'facet_grid'將它拋棄。你可能可以在'facet_grid'裏面'labeller'做些事情,但我不習慣。 – Haboryme

回答

1

這裏是你如何使用自定義標籤。與Haboryme有聯繫的想法被採取了from question。請注意,由於演示目的,theme不是必需的,所以我最小化了代碼。

library(ggplot2) 
labs <- sapply(strsplit(as.character(mockdata$Measurement), ", "), 
       FUN = function(x) { 
       x1 <- x[1]; x2 <- x[2] 
       parse(text = paste("plain('", x1, ",') ~ ", "italic('", x2, "')", sep = "")) 
       }) 

ggplot(mockdata, aes(variable, Measurement)) + 
    geom_tile(aes(fill = mockdata$plotval), colour = "dark red") + 
    facet_grid(category~type, scales='free', space='free') + 
    scale_fill_gradient2(limits=c(-20, 20),high = "firebrick3", low = "dodgerblue4") + 
    theme_minimal() + 
    scale_y_discrete(labels = labs, breaks = mockdata$Measurement) + 
    labs(title="", x="", y="", fill="") 

enter image description here

+1

我以另一種方式出來了。即:將實驗室名稱設置爲'mockdata $ Measurement',然後使用'scale_y_discrete'而不使用'breaks'參數。 (因爲我的答案和這個非常相似,所以我不需要將它作爲新的答案發布。) – mt1022