2016-03-31 11 views
5

ファセットラップのラベルに2つの異なるサイズのテキストを作成したいとします。例えばggplotファセットラップラベルで異なるフォントサイズを使用するにはどうすればよいですか?

  • 種X(サイズ14)
  • 総漁獲量(N = 133)(サイズ12)

enter image description here

test <- read.csv(paste0(path, "Costello Artvgl2 for Stack.csv"), sep = ";", dec = ",", header = T) 

str(test) 


test$Wert <- factor(test$Wert, levels = c("one","two","three","four","five","six")) 


test$Sampling.site <- factor(test$Sampling.site, levels = c("Species X Area T","Species Y Area T","Species X Area A","Species Y Area B","Species X Area B","Species Y Area C")) 


levels(test$Sampling.site) <- c("Species X\nTotal catch (n=133)", "Species Y\nTotal catch (n=185)", "Species X\nSampling area A (n=57)", "Species Y\nSampling area B (n=122)", 
          "Species X\nSampling area B (n=76)", "Species Y\nSampling area C (n=63)") 

theme_new <- function(base_size = 12, base_family = base_family){ 
theme_bw(base_size = base_size) %+replace% 
theme(
    axis.text.x =  element_text(size = 8), 
    axis.text.y =  element_text(size = 8), 
    axis.title.x =  element_text(size = 12, vjust = 0.01), 
    axis.title.y =  element_text(size = 12, vjust = 0.9, angle = 90), 

    plot.title =  element_text(size = 10, face = "bold"), 

    legend.key=   element_rect(colour= NA, fill =NA, size = 0.5), 
    legend.key.size = unit(1, "lines"), 
    legend.text =  element_text(size = 8), 
    legend.title =  element_blank(), 

    strip.background = element_rect(fill = NA, colour = NA), 
    strip.text =  element_text(size = 8, face = "bold",hjust = 0.5, vjust = 0.9), 

    panel.background = element_rect(fill = "white"), 
    panel.border =  element_rect(fill = NA, colour="black"), 
    panel.grid.major = element_blank(), 
    panel.grid.minor = element_blank(), 
    panel.margin =  unit(1, "lines") 

) 
} 

ggplot(test, aes(Fi, Pi),group=Wert)+ 
geom_point(aes(colour = factor(Wert),shape = factor(Wert)),size=3)  +       
    scale_shape_manual(values=c(20,18,19,15,16,17))+      
    scale_x_continuous(limits=c(0, 1),breaks=c(0,0.2,0.4,0.6,0.8,1.0))+  
    scale_colour_brewer(type = "qual", palette = "Paired")+ 
    scale_y_continuous(limits=c(0, 100),breaks=c(0,20,40,60,80,100))+   
    labs(x = "Frequency of occurrence", y = "Prey-specific abundance [%]")+ 
    facet_wrap(~Sampling.site,scales = "free",ncol = 2) + 
    theme_new() 

はありますそれを実現する可能性は?

+3

これは良い質問ですが、あなたはあなたの例は、最小限かつ再現性のあることを検討します。例えば。 [ドキュメンテーション](http://docs.ggplot2.org/current/facet_wrap.html)の例を参考にしてください。 – Axeman

+0

コードを再現できるように、どのようにExcelファイルをアップロードできますか? –

+0

しないでください。あなたの質問はあなたの特定のデータに縛られておらず、あなたの質問のほとんどのコードは関連していません。回答者の手間を最小限に抑えて問題を示す簡単な例を作成してください。繰り返しになりますが、マニュアルの例の1つを使用するだけで、単純な単純な例を作ることができます。質問は将来の読者にとっても役立つはずであることに留意してください。 [ここでいくつかのヒントを参照してください](http:// stackoverflow。com/questions/5963269/how-to-make-a-great-r-reproducible-example)を参照してください。 – Axeman

答えて

4

下の解決策は、上付き文字(または下付き文字)を使用してファセットラベルの2行目のフォントサイズを小さくするというハックです。私はどのように細かいgrobsの直接操作に頼ることなく、ラベルのサイズを細かく制御するか分からないが、それを行うためにlabeller関数を書く方法があるかもしれない。

この例では、組み込みのmtcarsデータフレームを使用します。まず、ファセットとラベルの両方に使用される列を追加します。私たちはcylでファセットしますが、ラベルの最初の行にそのファセットのシリンダ数を表示し、2番目の行にそのファセットのデータ点数を表示します。これを行うには、mtcarsに2つの新しい列を作成します(Label1Label2)。これを使用してファセットラベルの各行を作成します。これらの2つの列で、グラフ内のラベルを取得します。 (Label3Label2に似ていますが、代わりに、上付きの添字を使用しています。これだけの問題は、あなたがプロットパネルの上部に二行目の底から距離を変更する場合。)

Label1Label2は、テキスト文字列ですプロットを作成するときには、label_parsedを使用して小さな字下げテキストを取得できるように、式の形式になっています。

library(ggplot2) 
library(dplyr) 
library(grid) 

mtcars.new = mtcars %>% group_by(cyl) %>% 
    summarise(Label1=paste0("bold(Cylinders:~", unique(cyl),")"), 
      Label2=paste0("bold(NULL[Count:~", length(cyl),"])"), 
      Label3=paste0("bold(NULL^{Count:~", length(cyl),"})")) %>% 
    full_join(mtcars) 

これでプロットを作成できます。ファセットをLabel1Label2にすると、2つの行が表示されます。 Label2の添字式を作成したので、label_parsedを使用してファセットにラベルを付けると、これは小さいフォントで表示されます。私はLabel2を少し大きくしてLabel1に比べて好きですが、この(ハッキー)メソッドではそれを制御する方法はありません。また、element_textにはlineheightという引数がありますが、ggplotはそれを尊重していないようです。その結果、ストリップラベルの線高を手動でリセットして、2つのラベル間のスペースを減らしました。

p = ggplot(mtcars.new, aes(wt, mpg)) + 
    geom_point() + 
    facet_grid(. ~ Label1 + Label2, labeller=label_parsed) + 
    theme_bw() + 
    theme(strip.background=element_rect(fill=NA, color=NA), 
     strip.text=element_text(size=12)) 

g <- ggplotGrob(p) 
g$heights[[3]] = unit(0.5,"lines") 

grid.draw(g) 

enter image description here

関連する問題