फोर्स आर को संक्षिप्त अक्ष लेबल की साजिश रचने से रोकने के लिए - उदाहरण के लिए ggplot2 में 1e + 00


111

Ggplot2 में मैं अक्ष लेबल को संक्षिप्त रूप में कैसे रोक सकता हूं - जैसे 1e+00, 1e+01कि एक बार x अक्ष के साथ प्लॉट किया गया है? आदर्श रूप से, मैं आर को उन वास्तविक मूल्यों को प्रदर्शित करने के लिए मजबूर करना चाहता हूं जो इस मामले में होंगे 1,10

किसी भी मदद की बहुत सराहना की।

जवाबों:


134

मुझे लगता है कि आप इसके लिए देख रहे हैं:

require(ggplot2)
df <- data.frame(x=seq(1, 1e9, length.out=100), y=sample(100))
# displays x-axis in scientific notation
p  <- ggplot(data = df, aes(x=x, y=y)) + geom_line() + geom_point()
p

# displays as you require
require(scales)
p + scale_x_continuous(labels = comma)

2
यह काम किया। धन्यवाद। ब्याज से बाहर, स्केल पैकेज के साथ ggplot2 में कुल्हाड़ियों के लिए अन्य 'लेबल' विकल्प क्या हैं?
जेपीडी

3
कृपया इस ggplot2.org पेज पर भी जाएँ , यह एक समान मुद्दे के साथ मेरे लिए बहुत उपयोगी था।
मार्टा करास

64

क्या आपने कुछ इस तरह की कोशिश की:

options(scipen=10000)

साजिश रचने से पहले?


3
यह वैज्ञानिक संकेतन का उपयोग करने का निर्णय लेने के लिए एक उच्च दंड निर्धारित करके काम करता है । इस उत्तर में अधिक स्पष्टीकरण: stackoverflow.com/a/18600721/1080804
इको

35

@Arun ने जो कुछ भी किया था, उसके लिए बस एक अपडेट, क्योंकि मैंने आज इसे आजमाया और यह काम नहीं आया क्योंकि इसे वास्तविक रूप दिया गया था

+ scale_x_continuous(labels = scales::comma)

2
@ अरुण का जवाब ठीक-ठीक काम करना चाहिए, क्या आपने इसे शामिल करने की उपेक्षा की है require(scales)? यह उस पैकेज को आयात करता है जिसमें commaपैमाना होता है । जैसा कि आपने खोजा है, आप पहले से आवश्यकता के बजाय इसे संदर्भित करते समय पैकेज को निर्दिष्ट कर सकते हैं।
सिनकोडेनदा

17

अधिक सामान्य समाधान के रूप में, आप scales::format_formatवैज्ञानिक संकेतन को हटाने के लिए उपयोग कर सकते हैं । यह आपको बहुत सारे नियंत्रण देता है कि आप अपने लेबल को कैसे प्रदर्शित करना चाहते हैं, scales::commaजिसके विपरीत केवल परिमाण के आदेशों का अल्पविराम अलग करता है।

उदाहरण के लिए:

require(ggplot2)
require(scales)
df <- data.frame(x=seq(1, 1e9, length.out=100), y=sample(100))

# Here we define spaces as the big separator
point <- format_format(big.mark = " ", decimal.mark = ",", scientific = FALSE)

# Plot it
p  <- ggplot(data = df, aes(x=x, y=y)) + geom_line() + geom_point()
p + scale_x_continuous(labels = point)

8

वहाँ एक समाधान है कि तराजू पुस्तकालय की आवश्यकता नहीं है।

तुम कोशिश कर सकते हो:

# To deactivate scientific notation on y-axis:

    p + scale_y_continuous(labels = function(x) format(x, scientific = FALSE))

# To activate scientific notation on y-axis:

    p + scale_y_continuous(labels = function(x) format(x, scientific = TRUE))

# To deactivate scientific notation on x-axis:

    p + scale_x_continuous(labels = function(x) format(x, scientific = FALSE))

# To activate scientific notation on x-axis:

    p + scale_x_continuous(labels = function(x) format(x, scientific = TRUE))

2

क्या वैज्ञानिक संकेतन के लिए आर का उपयोग करने वाले दंड को निर्धारित करने के लिए सबसे सरल सामान्य समाधान नहीं है?

यानी scipen()उस नंबर पर सेट करें, जिसके साथ आप सहज हैं।

उदाहरण के लिए, यदि चार्ट पर आपकी अक्ष अधिकतम 100 000 होने की संभावना है, तो सेटिंग scipen(200000)यह सुनिश्चित करेगी कि R (और ggplot) 200000 से नीचे के सभी नंबरों के लिए मानक संकेतन का उपयोग करेगा और ggplot फ़ंक्शन में किसी भी पंक्ति को जोड़ने की कोई आवश्यकता नहीं होगी।


0

मूल प्रश्न का विस्तार करने के साथ-साथ अंश भी शामिल हैं, अर्थात 1, 0.1, 0.01, 0.001 आदि और अनुगामी शून्य से बचना

p + scale_x_continuous(labels = function(x) sprintf("%g", x))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.