2017-04-20 72 views
3

我想创建一个RMT plot其中我想要一个双x轴,但都显示在底部。我发现了一些使用其他R包的例子(例如this lattice example,但我想知道是否有人知道使用ggplot2的方法吗?)双x轴在底部使用ggplot在R

创建类似于我的假数据框,每个数据点由不同百分比的a ,b,C(注A + b + C = 100%,每个点),同时有三种类型的植被点我想颜色不同:

a <- c(10,30,40,20,30,50,20,10,30,20,60,20) 
b <- c(20,30,10,40,60,20,30,60,30,10,20,70) 
c <- c(70,40,50,40,10,30,50,30,40,70,20,10) 
d <- rep(c("tree", "grass", "herbs"),4) 

df_trio <- data.frame(a,b,c,d) 

有两个X轴创建情节(一个顶部和一个底部),其中第一个x轴的百分比从0-100%变化,第二个为100-0%:

plot_trio <- ggplot(df_trio, aes(a,b)) + 
    geom_point(aes(colour = factor(d)))+ 
    theme_classic()+ 
    coord_cartesian(xlim = c(0,100), ylim = c(0,100), expand = FALSE)+ 
    scale_x_continuous(breaks = c(0,10,20,30,40,50,60,70,80,90,100),"%a", 
       sec.axis = sec_axis((~(.-100)*-1), name = "%c", 
       breaks = c(100,90,80,70,60,50,40,30,20,10,0)))+ 
    scale_y_continuous(breaks = c(0,10,20,30,40,50,60,70,80,90,100))+ 
    ylab("%b")+ 
    geom_abline(slope = -1, intercept = 100)+ 
    annotate("text", label="0% of c",x=55,y=52, size=3) 

plot_trio 

斜率线显示因子c为0%(如果因子a和b等于0,则为100%,因此在原点)。

我试图用

scale_x_continuous(breaks=c(0,10,20,30,40,50,60,70,80,90,100),"%a", 
       position="top", sec.axis = sec_axis((~(.-100)*-1), name = 
       "%c", breaks=c(100,90,80,70,60,50,40,30,20,10,0))) 

他们都迫使顶端,但随后他们就切换。有没有人有一个提示,我应该去做什么,或者我应该放弃ggplot,并使用格吗?

+0

保存情节一样'.svg'和移动第二轴使用Photoshop或Inkscape的顶部。 – Jimbou

回答

2

这看起来像一个良好的用例ggtern

df_trio <- data.frame(a = c(10,30,40,20,30,50,20,10,30,20,60,20), 
         b = c(20,30,10,40,60,20,30,60,30,10,20,70), 
         c = c(70,40,50,40,10,30,50,30,40,70,20,10), 
         d = rep(c("tree", "grass", "herbs"),4)) 
require(ggtern) 
ggtern(df_trio, aes(a, b, c, colour = d)) + 
    geom_point(size = 4) + 
    theme_light() + theme_showarrows() + 
    labs(xarrow = "% a", yarrow = "% b", zarrow = "% c") 

enter image description here

+0

非常感谢您的回复Brian!我曾考虑过使用这个软件包,但使用直角混合三角(RMT)代替像ggtern使用的等边混合三角(EMT)这样的想法有很多好处,例如在一个中增加了3个以上的组件图(https://www.researchgate.net/publication/259905972_Toward_a_quantitative_nutritional_ecology_The_right-angled_mixture_triangle)。尽管绘制了三个组件,您的解决方案是一个很好的例子,谢谢! – sv1989