2017-08-02 8 views
1

ggplot2.2.2 updatethis onethis oneのような古い解決法が適用されないため、このトピックはこれ以上含まれていないようです。幸いにも、このプロセスは以前よりもはるかに簡単です。 1行のコードと2番目のY軸(as shown here)があります。ファセット付きセカンダリX軸を追加

しかし、私は私のプロット上二X軸を取得することはできません...

私は堆積物コアに沿って金属濃度の深さプロファイルを比較しています。私は金属濃度の背後にあるgeom_areaとして炭素とリン酸塩の濃度を表示したいと思います。問題は、炭素とリン酸塩の両方の濃度が金属と同じスケールでないことです。したがって、私は第二の軸が必要です。

テーマは、(this websiteから取られた)次のとおりである:

theme_new <- theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), panel.background = element_blank(), axis.line = element_line(colour = "black"), strip.text.x = element_text(size=10, angle=0, vjust=0), strip.background = element_blank(), strip.text.y = element_text(angle = 0), legend.position="none",panel.border = element_blank(), axis.text.x=element_text(angle=45,hjust=1)) # Axis tick label angle 

そして、このコードは、私がX軸の下でそれを指定するにもかかわらず、第2のY軸を提供します。

ggplot(MasterTable)+ 
    geom_line(aes(Depth,Conc.nM))+ 
    geom_area(aes(Depth,Conc.uM, fill=Variable))+ 
    scale_x_continuous("Depth (cm)", sec.axis = sec_axis(~ . *100, name = "Carbon & Phosphate"))+ 
    scale_y_continuous("Metal concentration (nM)")+ 
    coord_flip()+ 
    theme_new+ 
    theme(legend.position = "right")+ 
    facet_grid(. ~ Assay, scales = "free") 

ggplot2 figure

誰も私には図の上部に二次軸を置く助けることができますか?

ありがとうございます!

構造(リスト(深さ= cで(15L、5L、2L、-1L、-3L、-5L、-7L、-9L、 -11L、 - :私のMasterTableの

dputは以下のとおりです。 13L、-15L、-17L、-19L、-21L、-23L、-25L、-27L、-29L、-31L、 15L、5L、2L、-1L、-3L、-5L、-7L、 、-11L、-13L、-15L、-17L、 -19L、-21L、-23L、-25L、-27L、-29L、-31L)、Conc.nM = c(24L、24L、 24L、100L 100L、75L、75L、85L、85L、120L、300L、1000L、200L、 240L、240L、800L、1100L、1500L、2300L、0L、10L、0L、50L、200L、 200L、50L、50L、200Lアッセイ=構造(c(1L、1L、1L、1L、1L、1L、1L、1L、1L、1L、1L、1L、1L、2L、 1L、1L、1L、1L、1L、1L、2L、2L、2L、2L、 2L、2L、2L、1L、1L、1L、1L、1L、1L、1L、1L、1L、1L、1L、 2L、2L、2L、2L、2L、2L)、ラベル= c(「計器1」、 「計器2」)、クラス=「因子」)、Conc 12L、1L、1L、1L、1L、1L、1L、1L、1L、1L、0L、0L、1L、0L、0L、0L、1L、0L、0L、0L、変数=構造(c(2L、2L、 2L、2L、9L、10L、10L、10L、9L、9L、10L、10L、9L、10L、10L) 2L、2L、2L、2L、2L、2L、2L、2L、2L、2L、2L、2L、2L、2L、 2L、1L、1L、1L、1L、1L、1L、1L、1L、1L、1L 1、1L、1L、1L、1L、1L、1L、1L、1L、 1L、1L、1L、1L).Label = c( "Carbon"、 "Phosphate")、class = "factor" "、 " Conc.nM "、" Assay "、" Conc.uM "、" Variabル ")、クラス= "data.frame"、row.namesの=のC(NA、 -38L))

答えて

1

ブライアンの答えと、上記で提案したテーマの変更のおかげで、私は次の図を得ました。

Sediment core

彼が示唆したように、あなたが最初にこのようなものを使用して手動でデータを変更する必要があります。

MasterTable$Conc.uM <- MasterTable$Conc.uM *100 

次に、コードでは、1と同じ補正係数を使用して軸を調整上記で使用される。ここに図を作るためのコードがあります。

ggplot(MasterTable)+ 
    geom_line(aes(Depth,Conc.nM))+ 
    geom_area(aes(Depth,Conc.uM, fill=Variable), alpha=0.6)+       #Area for second X-axis 
    geom_area(aes(Depth,Conc.nM), alpha=0.95)+          
    geom_point(aes(Depth,Conc.uM), size=1, shape=16, alpha=0.3)+      #Adding points for second X-axis 
    geom_point(aes(Depth,Conc.nM), size=1, shape=16, alpha=0.8)+ 
    scale_fill_manual(values=colours) + scale_colour_manual(values=colours) +  

    labs(title="Sediment core", color="",fill="") +         #Place legend title in both color="" and fill="" 

    scale_y_continuous("Metal concentration (nM)", 
       sec.axis = sec_axis(~ . /100, name = "[Pi] (uM)            DOC (mg/L)"))+  
    scale_x_continuous("Depth (cm)", breaks=pretty_breaks(n=7))+ 

    coord_flip()+                  #Required to make a proper depth profile 
    theme_new+                   #Reference to custom theme 
    facet_grid(. ~ Assay, scales = "free")            #Scales makes that the axis size can change 

ここで解決する必要がある問題が1つあります。ティック・マークとラベルがファセットの下にくるようにしたいと思います。図の上部にあるよりも論理的で忙しいとは思えません。

+0

'+テーマ(strip.placement =" outside ")' – Brian

+0

完璧、ありがとう – Marty999

0

あなたのコードから:

... 
    scale_x_continuous("Depth (cm)", sec.axis = sec_axis(~ . *100, name = "Carbon & Phosphate"))+ 
    scale_y_continuous("Metal concentration (nM)") + 
    coord_flip() ... 

したい主などの軸を検討し、" カーボン&リン酸を"と平行している。また、coord_flipを使用するコンテキストで、「x軸」と「y軸」とは何を意味するのかを検討してください。

TL; DR:セカンダリ軸をscale_y_continuousに移動するだけです。

+0

こんにちはブライアン、ありがとう。良いキャッチ、それは今x軸を上に表示します。しかし、データはこの軸に沿っていません。それは依然として下部のx軸にリンクされています。 Conc.uMデータをsec_axisに従うように指定する方法はありますか? – Marty999

+0

データはデータであり、特定の軸に「追従」しません。それらは、共通のスケール(例えば、マイクロモルをナノモルにするために1000を掛けるなど)に予め変換されるべきである。あなたの2番目の軸は単純に*それらにラベルを付けます。少なくともデータのサブセットがなければ、それ以上のことはできません。 – Brian

+0

ええ、それは私もそれを見た方法です。データファイルは次のとおりです:https://www.dropbox.com/s/9t1ppyfvm983try/LAS2016_Master-table8.csv?dl=0 – Marty999

関連する問題