2017-05-26 35 views
1
定性變量延長限

大家好,感謝您的考慮,在ggplot

的目標是提供在那裏有很多很多的x軸標籤的情況下更多的空間。注意我不在乎標籤本身是否在圖上可見(我已經在下面的代碼中將它們排除在外)。我想要改變的是,當一個典型的geom_point圖中有〜1000個x軸標籤和1000個數據點時,與這些第一個和最後幾個x軸標籤相關的左邊和右邊的點被壓制繪圖區域的邊緣。我想填補一些空間,所以這些點不會被擠壓。

我不知道是否有改變的情況下xixii是不是數字,而是,字符串的scale-x-discrete(limits=c(xi,xii)) type命令的方式。一個例子,使這個(希望)明確:

在這第一種情況下,灰點陰影圖的最右點和邊緣之間的間距是相當大的,這樣的點不會正確地流血靠在繪圖區域的邊緣。我想要這種效果,在最後一點和劇情邊緣之間有一些空間。

library(ggplot2) 
set.seed(10) 
lessVals = sample(1:100000, 10, replace = T) 
lessIDs = as.character(sample(1:100000, 10, replace = T)) 
df.less <- data.frame(lessIDs, lessVals) 
df.less$lessIDs <- as.character(df.less$lessIDs) 
lessDat <- ggplot(df.less) 
lessDat + geom_point(aes(lessIDs, lessVals)) + theme(axis.text.x = 
element_blank()) 

但是,在以下情況下有成千上萬的x軸點,而可視化的身份本身是無關的標籤,我想避免的左邊和最右邊的點被壓扁了到繪圖區域的邊緣。注意我並不在意圖中的點被壓縮在一起 - 這是不可避免的,而過度繪圖可以通過一個alpha參數或其他東西來解決。我想要解決的是讓繪圖邊緣上的點(最好是左邊和右邊)在水平面之間有一些緩衝區,其中左側是y軸刻度,右側是此刻沒有什麼(但可能是,例如,一個傳奇)。

manyIDs = as.character(sample(1:100000, 1000, replace = T)) 
manyVals = sample(1:100000, 1000, replace = T) 
df.many <- data.frame(manyIDs, manyVals) 
df.many$manyIDs <- as.character(df.many$manyIDs) 
manyDat <- ggplot(df.many) 
manyDat + geom_point(aes(manyIDs, manyVals)) + theme(axis.text.x = 
element_blank()) 

我很想知道究竟可以做些什麼來爲這些點的水平邊緣提供一點緩衝。

感謝您分享您的天才。

回答

0

因爲你的x變量是字符,ggplot2創建一個'離散'的x軸。當類別數量相當小(2 - 25)時,離散軸的默認繪圖限制很有意義。您可以使用scale_x_discreteexpand參數來手動調整繪圖限制。視覺外觀將取決於點和圖形設備的大小,因此您可能需要進行相應的調整。

例如,scale_x_discrete(expand=c(0.1, 0))將展開該圖的每一邊10%的數據範圍。雖然scale_x_discrete(expand=c(0, 2))會將每邊擴展2(無論單位x是多少)。另請參閱http://ggplot2.tidyverse.org/reference/scale_discrete.html

p1 <- ggplot(df.less, aes(x=lessIDs, y=lessVals)) + 
     geom_point() + 
     theme(axis.text.x=element_blank()) + 
     labs(title="Default x-axis limits") 

# Added x-axis space with expand. 
p2 <- ggplot(df.less, aes(x=lessIDs, y=lessVals)) + 
     geom_point() + 
     theme(axis.text.x=element_blank()) + 
     scale_x_discrete(expand=c(0, 2)) + 
     labs(title="expand=c(0, 2)") 

p3 <- ggplot(df.many, aes(x=manyIDs, y=manyVals)) + 
     geom_point() + 
     theme(axis.text.x=element_blank()) + 
     theme(panel.grid.major.x=element_blank()) + 
     theme(axis.ticks.x=element_blank()) + 
     labs(title="Default x-axis limits") 

# Added x-axis space with expand. 
p4 <- ggplot(df.many, aes(x=manyIDs, y=manyVals)) + 
     geom_point() + 
     theme(axis.text.x=element_blank()) + 
     theme(panel.grid.major.x=element_blank()) + 
     theme(axis.ticks.x=element_blank()) + 
     scale_x_discrete(expand=c(0.1, 0)) + 
     labs(title="expand=c(0.1, 0)") 

library(gridExtra) 

ggsave("plots.png", plot=arrangeGrob(p1, p2, p3, p4, nrow=2), 
     height=4, width=6, dpi=150) 

enter image description here

+0

非常感謝您@bdemarest –