2017-12-19 106 views
7

एक्स 2 अक्ष प्रारूप में x-axis लेबल को संशोधित कैसे करें जब x log2-scale में है?एक्स-अक्ष टिक लेबल को 2^x प्रारूप में कैसे प्रारूपित करें?

जब यह ग्राफ पर दिखाई देता है, तो एक्स अधिमानतः सुपरस्क्रिप्ट में होना चाहिए।

+1

यदि एक्स पहले से ही लॉग पैमाने में है तो आपको केवल लेबल को संशोधित करने की आवश्यकता है। डीएफ <- data.frame (x = 1: 4, y = 1: 4); ggplot (df) + geom_point (aes (y = y, x = x)) + scale_x_continuous (लेबल = पेस्ट 0 ("2 ^", 1: 4)) –

उत्तर

8

यहां कस्टम रूपांतरण और लेबलिंग फ़ंक्शन करने का एक तरीका है। यह मनमाने ढंग से डेटा पर काम करना चाहिए।

library(ggplot2) 

label_log2 <- function(x) parse(text = paste0('2^', log(x, 2))) 

ggplot(mtcars, aes(mpg, cyl)) + 
    geom_point() + 
    scale_x_continuous(
     trans = 'log2', 
     labels = label_log2) 

enter image description here


alistaire की टिप्पणी के अनुसार, हम भी scales पैकेज द्वारा प्रदान कार्यों के साथ अक्ष लेबल फ़ॉर्मेट कर सकते हैं:

library(scales) 

ggplot(mtcars, aes(mpg, cyl)) + 
    geom_point() + 
    scale_x_continuous(
     trans = 'log2', 
     labels = trans_format('log2', math_format(2^.x))) 

यहाँ, trans_format लेबल निर्दिष्ट के बाद परिवर्तन से प्रारूप होगा ।


मैनुअल के अनुसार:

ट्रांस
या तो एक परिवर्तन ऑब्जेक्ट का नाम, या वस्तु ही। अंतर्निर्मित परिवर्तनों में "एएसएन", "एटान", "बॉक्सकोक्स", "एक्सप", "पहचान", "लॉग", "लॉग 10", "लॉग 1 पी", "लॉग 2", "लॉगिट", "संभावना" , "प्रोबिट", "पारस्परिक", "रिवर्स" और "वर्ग"।

ए रूपांतरण ऑब्जेक्ट एक साथ एक उलझन में बंडल, यह उलटा है, और ब्रेक और लेबल बनाने के तरीकों। परिवर्तन वस्तुओं स्केल पैकेज में परिभाषित हैं, और name_trans कहा जाता है, उदा। boxcox_trans। आप trans_new के साथ अपना स्वयं का परिवर्तन बना सकते हैं।

trans एक परिवर्तन वस्तु या निर्मित परिवर्तन के नाम पर (scales::log2_trans करने के लिए एक कॉल के रिटर्न मान) की तरह होना चाहिए, इसलिए हम भी trans = scales::log2_trans() बजाय trans = 'log2' उपयोग कर सकते हैं।

+0

उपरोक्त, लेकिन ऐसा लगता है कि एक तर्क नहीं है फ़ंक्शन कॉल के रूप में पारित किया जा रहा है और दूसरा फ़ंक्शन नाम के रूप में पारित किया गया है जो असंगत है? –

+0

@ 42-, यकीन है, यह अजीब लग रहा है। 'लेबल्स' तर्क को तर्क के रूप में ले सकता है, जबकि 'ट्रांस' को एक परिवर्तन वस्तु को अंतर्निहित नाम का नाम चाहिए। फ़ंक्शन नाम को पार्स करना 'ट्रांस' के लिए काम नहीं करता है। मैंने इसे प्रतिबिंबित करने के लिए उत्तर संपादित किया है। और मैंने पाया कि 'trans =' log2'' का उपयोग करना बेहतर होगा। – mt1022

+2

'स्केल' भी फॉर्मेटर फ़ंक्शंस प्रदान करता है। इस मामले में यह पूर्वलेखित लोगों में से एक नहीं है, लेकिन उपलब्ध कार्यों के साथ निर्माण करना मुश्किल नहीं है: 'लेबल = स्केल :: trans_format (' log2 ', स्केल :: math_format (2^.x)) ' – alistaire

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