2013-01-23 15 views
18

में लगातार कर रहे हैं मुझे लगता है मैं ggplot2मैं क्यों मिलता है "position_dodge निरंतर चौड़ाई की आवश्यकता है" भले ही चौड़ाई ggplot2

> df <- data.frame(X = 127:131, Y = rnorm(5)) 
> df 
    X   Y 
1 127 0.9391077 
2 128 -0.9392529 
3 129 -1.1296221 
4 130 1.1454907 
5 131 1.8564596 
> ggplot(df) + geom_bar(aes(X,Y), stat ="identity", position = "dodge") 
Warning message: 
position_dodge requires constant width: output may be incorrect 

में सरल बार चार्ट के लिए समझ में नहीं आता एक चेतावनी संदेश यह तभी हो रहा है हो रही है एक्स मानों की कुछ श्रेणियों के लिए। मैंने इस पर जानकारी के लिए गुमराह किया है, लेकिन यह सब मामलों के बारे में बात कर रहा है जब चौड़ाई वास्तव में अलग हैं, या ऐसे मामले जहां स्टेटस "पहचान" नहीं है। इस मामले में एक्स मान केवल पूर्णांक हैं, इसलिए यह सरल होना चाहिए।

उत्पादित चार्ट ठीक दिखता है, इसलिए मैं केवल एक चेतावनी को अनदेखा करने के बारे में असहज हूं जिसे मैं समझ नहीं पा रहा हूं।

कोई विचार क्या चल रहा है?

+4

मैंने जिथब पर डोडी चेतावनी के बारे में एक मुद्दा प्रस्तुत किया है। https://github.com/hadley/scales/issues/33 –

+1

अब इसे 'स्केल' के विकास संस्करण में ठीक किया गया है। –

उत्तर

38

options(warn = 2, error = recover) सेट करना, और कोड को पुन: जीवंत करने से हमें समस्या मिलती है।

if (!zero_range(range(widths))) { 
    warning(name, " requires constant width: output may be incorrect", 
     call. = FALSE) 
} 

Floating point rounding errors मतलब है कि widths थोड़ा अलग मान लेता है:

collide समारोह (कॉल स्टैक में संख्या 16) के अंदर, वहाँ कोड के इस टुकड़े है।

format(widths, digits = 22) 
# [1] "0.9000000000000056843419" "0.8999999999999914734872" "0.8999999999999772626325" 

tolerance जांच करते हुए कि संख्या ही कर रहे हैं के लिए भी सख्त है: के बारे में 2.2e -14।

args(zero_range) 
# function (x, tol = .Machine$double.eps * 100) 
# NULL 
.Machine$double.eps * 100 
# [1] 2.220446e-14 

तो चेतावनी गलत है; इसके बारे में चिंता मत करो।

+1

badass उत्तर। धन्यवाद। – Michael

संबंधित मुद्दे