2011-04-21 121 views
5

正是在ggplot2可以得出第二個「軸」的標籤相關的值由X和Y的比例GGPLOT2 - 軸美學

enter image description here

編輯:

我有一個數據框架有兩個變量,都是相關的和百分比的。我想要展示V1與V2相關的演變;例如,我需要多少比例的V2來獲得V1的20%(反之亦然)。

V1 V2 
0 0 
0.03 0.0005 
0.10 0.0015 
0.13 0.0020 
.... 
1 1 

現在我的問題是我該如何做X和Y的內軸,顯示X和Y百分比之間的關係。 另外我怎樣才能設置ggplot使用(0,0)作爲x和y軸的截距?

+0

您可以使用'geom_rect'和'geom_text'手動添加這些值。如果你可以提供關於計算值的額外細節,那將是非常好的,因爲不清楚你在內部「軸」上顯示的是什麼。 – daroczig 2011-04-22 13:33:53

+0

@daroczig:我編輯了更多信息的帖子 – Barata 2011-04-22 18:54:41

回答

8

您可以輕鬆地使用ggplot2從一層到另一層(使用geom_rectgeom_text)構建此圖。不是一個閃亮的解決方案,但你可以得到由圖片:

產生一些數據要在情節中:

df <- data.frame(A=sort(runif(20)), B=sort(runif(20))) 
df <- rbind(df, c(1,1)) 

產生上述數據表的修改版本將被繪製成「內部」軸(:我只計算兩個份中位數):

df_rect <- data.frame(xmin=c(0, median(df$A), -0.01, -0.01), xmax=c(median(df$A), 1, 0, 0), ymin=c(-0.01, -0.01, 0, median(df$B)), ymax=c(0, 0, median(df$B), 1), color=grey(c(0.7, 0.2)), alpha=c(0.8, 0.4, 0.8, 0.4)) 

生成類似的東西爲繪製文本:

df_text <- data.frame(x=c(median(df$A)/2, median(df$A) + (1-median(df$A))/2, 0.05, 0.05), y=c(0.02, 0.02, median(df$B)/2, median(df$B) + (1-median(df$B))/2), label=rep('50%', 4)) 

,最後所有的情節:

ggplot(df, aes(A, B)) + geom_point() + 
    geom_line() + 
    geom_rect(data=df_rect, aes(xmin=xmin,xmax=xmax,ymin=ymin,ymax=ymax, fill=color, alpha=alpha), inherit.aes = FALSE) + scale_fill_grey() + 
    geom_text(data=df_text, aes(x=x, y=y, label=label), inherit.aes = FALSE) + 
    theme_bw() + scale_y_continuous(limits=c(-0.01, 1), formatter='percent') + scale_x_continuous(limits=c(-0.01, 1), formatter='percent') + opts(legend.position="none") 

geom_point點給定值和geom_line連接所有(如我在您的示例圖像所看到的)。所有參數均爲geom_rect,繪製灰色「內軸」,文字部分爲geom_text。您將必須使用生成的(輸入)數據幀(在上例中:df_rextdf_text)來獲取您所需的數據。 theme_bw代表黑色和白色主題,兩個scale_continous選項代表設置0和1之間的限制,並設置百分比formatter

導致: sample plot

我希望你將能夠定製和升級這個小例子,以您的需求!