2012-12-04 6 views
19

タフテの暗黙の水平ラインをRでどのように複製できますか?Rグラフ:タフテの水平バーラインを作成する

library(ggplot2)  
ggplot(msleep, aes(x=order)) + stat_bin() + theme_bw() 

簡単でなければならない境界線を削除:

Tufte bars

たとえば、以下は、良好な出発点です。バーと水平線を重ねる重要なポイントは、私には不明です。

私はここに二つのアプローチを想像:この特定の例

  1. アドホックソリューション原則としてテーマ
+0

閉じる。 – Andrie

+0

私は主な問題は、タイトルが提案された複製とまったく同じだと思います。差異(すなわち、正確な場合)は、タイトルに表現可能な形式に下げることができるはずです。彼らが十分に異なっているならば、それぞれのタイトルはその特異性を反映すべきです。 – krock

+0

@Andrie、うん、私はあなたに同意しますが、私はモッドがこれを再開したと思います。私の目標は、2つのポストをリンクするためにもっとそうだったので、私はそこに行き、ここにリンクします。 Krochはタイトルが問題であることは間違いありません。最後に "in ggplot2"を追加すると、2つをさらに区別することができます。 –

答えて

11

ない答えを@Andrieする大きな加えていますが、ggplot2とタフティ - squeプロットを作るために、パッケージggthemesを利用することができます。以下は、私がextrafontパッケージを使用してフォントを変更、theme_tufteを使用して、微調整をするために、他の全ての視覚的特徴optsを使用しています:

library(ggthemes) 
library(extrafont) 
ggplot(msleep, aes(x=order)) + stat_bin(width=0.6, fill="gray") + 
    theme_tufte(base_family="GillSans", base_size=16, ticks=F) + 
    theme(axis.line=element_blank(), axis.text.x=element_blank(), 
     axis.title=element_blank()) + 
    geom_hline(yintercept=seq(5, 20, 5), col="white", lwd=1.2) 

enter image description here

18

にそれを組み込む方法

  • 提案、これは簡単です - すべてのあなた新しいレイヤーに白い水平線を描画する必要があります。あなたはこれを行うにgeom_hlineを使用することができます:あなたの2番目の質問については

    library(ggplot2)  
    ggplot(msleep, aes(x=order)) + stat_bin() + theme_bw() + 
        geom_hline(yintercept=seq(5, 20, 5), col="white") 
    

    enter image description here

    を - カスタムGEOMを作成することが可能でなければなりませんが、私は、このテーマに組み込むことは難しいかもしれ想像しますこれは、yスケールを読み込み、それに対応して線をプロットします。

    (私が間違って証明するのが大好きです。)

  • +0

    ニースは、自動的にseq値を抽出することは難しいです? – Rico

    +0

    @Rico:それは簡単なはずです。 'horiz_lines' < - seq(y_min、y_max、by = 5)'で、ここで私は最大値と最小値を "事前計算"しました。その後、 'yintercept = c(horiz_lines)'とすると完了です。 –

    3

    このため非常に簡単ベースRのソリューションもあります:私はこの質問にはずっと良い言い方だと思うので、私は、nに投票

    tmp <- table(msleep$order) 
    barplot(tmp, col='black', las=3) 
    abline(h=seq(5, max(tmp), by=5), col='white', lwd=2) 
    

    enter image description here

    +0

    エレガントなソリューション! – Rico

    +0

    'lapply(... abline(...)の代わりに'セグメント(0,1:4 * 5,100,1:4 * 5、col = 'white') ')) 'それはよりエレガントなイベントです。 – Backlin

    +0

    @Backlin提案のおかげで、「アブライン」もベクトル化されていることを思い出させてくれました。 – Thomas

    関連する問題