2016-05-23 95 views
4

我使用點大小可視化變量。 我的問題是,第一個(最小)點大小(在本例中爲「70」)顯着(不成比例)小於其餘部分。 (見CP傳說)geom_point最小點大小不成比例

Notice that the point size for "70" is very small

這是我使用的代碼:

ggplot(data=testdata, aes(x=variable, y=value, group=ID, size=CP)) + geom_point() 

在這樣的數據:

ID CP variable value 
1 C1 70  A 76 
2 C2 95  A 20 
3 C3 100  A 30 
4 C4 NA  A 17 
5 C1 70  B 36 
6 C2 95  B 10 
7 C3 100  B 51 
8 C4 NA  B 41 
9 C1 70  C 89 
10 C2 95  C  1 
11 C3 100  C 94 
12 C4 NA  C  6 
13 C1 70  D 100 
14 C2 95  D 98 
15 C3 100  D 16 
16 C4 NA  D 33 

現在,當我試圖調整點大小R不喜歡:

> testplot = ggplot(data=testdata, aes(x=variable, y=value, group=ID, size=CP)) + geom_point() 
> testplot = testplot + scale_size_discrete(range=c(3,5)) 
Warning message: 
Using size for a discrete variable is not advised. 
> testplot 
Error: Continuous value supplied to discrete scale 

而且沒有情節產生。同爲這樣:

> testplot = ggplot(data=testdata, aes(x=variable, y=value, group=ID, size=CP)) + geom_point() 
> testplot = testplot + scale_size_continuous(to=c(3,5)) 
Error in scale_size_continuous(to = c(3, 5)) : 
    unused argument (to = c(3, 5)) 
> testplot 
Error: Continuous value supplied to discrete scale 
+0

一種解決方法:'scale_size(極限= C(1,MAX(TESTDATA $ CP) ,break = unique(testdata $ CP))',但是我不確定爲什麼默認值不起作用。對於一個連續的'size'變量,你不能使用'discrete'大小刻度,這就是爲什麼你的'scale_size_discrete ''不能修復 – Gregor

+1

你只是缺少'range'參數而不是'to'參數 - 'scale_size_continuous(range = c(3,5))' – aosmith

+0

感謝@aosmith確實是'scale_size_continuous(range = (3,5 ))'按預期工作。我仍然想知道爲什麼第一個點的大小非常小,除非我指定的範圍等於圖例中的步驟。數據的分類性質是否會將其搞亂?我是否必須手動調整每個圖形的範圍? –

回答

0

原來這是一個,這意味着該點的比例是正確的「人類感知的假象」,但人們可能有印象,事實並非如此。請參閱開發人員的討論here

對我來說,最好的可能的解決方法是使用scale_radius(range=c(1, 6))

進一步閱讀上感知和縮放的關係:Stevens' power law