2011-09-18 9 views
30

theme_bw()に基づいてggplotの新しいテーマを作成したいとします。デフォルトテーマのコピーと変更

私は、次の手順は、(擬似コードで)必要な想像

  1. theme_bw(のコピーを作成します):theme_new() <- theme_bw()
  2. コピーを変更します。theme_update(axis.title.x = theme_text(family = base_family, size = base_size, vjust = 0.5))

どのように上の任意のアドバイスをこれを実装することは非常に高く評価されます!


編集: @Andrie、私は私のニーズのためのあなたの答えを修正:

theme_new <- theme_set(theme_bw()) 
theme_new <- theme_update(axis.title.x = theme_text(family = base_family, size = base_size, vjust = 0.5)) 

はしかし、私は次のエラーを取得する:

ggplot(mtcars, aes(factor(cyl))) + geom_bar() 

Error in match(gparname, names(gpars)) : object 'base_size' not found


編集: 31/10/2017、@Andrieが提供する回答はうまくいきます。 Rバージョン3.4.1、ggplot2_2.2.1

答えて

10

wikiあなたのコードがちょうど必要modifyList

theme_new <- function (base_size = 12, base_family = "", ...){ 
modifyList (theme_bw (base_size = base_size, base_family = base_family), 
      list (axis.title.x = theme_text(family = base_family, 
       size = base_size, vjust = 0.5))) 
} 
+0

ありがとうございました!私はこれを前に試しましたが、 'base_size = base_size、base_family = base_family'部分を見つけず、常に' Error in match(gparname、names(gpars)):object 'base_size' not found'というエラーが出ました。 – donodarazao

+3

注:これはggplot2 0.9で導入された新しいテーマ設定システムでは冗長です。 – baptiste

+2

[新しいテーマシステムを説明し、それを変更する方法を説明するリンク](https://github.com/wch/ggplot2/wiki/New-theme-system) – Gregor

5

はこのようにしてみてください。

### Set up a blank theme 
theme_none <- theme(
    panel.grid.major = element_blank(), 
    panel.grid.minor = element_blank(), 
    panel.background = element_blank(), 
    axis.title.x = element_text(colour=NA), 
    axis.title.y = element_blank(), 
    axis.text.x = element_blank(), 
    axis.text.y = element_blank(), 
    axis.line = element_blank() 
    #axis.ticks.length = element_blank() 
) 
6

、私は何度も何度も同じものを書いて避けるためにtxttxt_boldを使っ記事here

txt <- element_text(size = 14, colour = "black", face = "plain") 
bold_txt <- element_text(size = 14, colour = "black", face = "bold") 

theme_whatever <- function(base_size = 14, base_family = "Palatino") 
{ 
    theme_bw(base_size = base_size, base_family = base_family) + 
    theme(
    legend.key = element_blank(), 
    strip.background = element_blank(), 

    text = txt, 
    plot.title = txt, 

    axis.title = txt, 
    axis.text = txt, 

    legend.title = bold_txt, 
    legend.text = txt) 
} 

注意に基づきます。

+0

リンクが壊れています。 – zx8754

関連する問題