জিজিপ্লট দিয়ে আমি অক্ষের বিন্যাস কীভাবে পরিবর্তন করব?


131

আমি কিছু উপাত্তের স্ক্র্যাপপ্লট আঁকতে আর এবং জিগপ্ল্লট ব্যবহার করছি, y-axis এর সংখ্যাগুলি কম্পিউটার শৈলীর এক্সপোনেন্ট ফর্ম্যাটিং, অর্থাৎ 4e + 05, 5e + 05, ইত্যাদির সাথে প্রকাশিত হচ্ছে তা ব্যতীত সমস্ত কিছুই ঠিক আছে is অগ্রহণযোগ্য, তাই আমি এগুলি এটিকে 500,000, 400,000, এবং অন্য হিসাবে প্রদর্শিত করতে চাই। একটি সঠিক ব্যয়কারী স্বরলিপি প্রাপ্তি গ্রহণযোগ্য হবে।

প্লটের কোডটি নিম্নরূপ:

p <- ggplot(valids, aes(x=Test, y=Values)) +
  geom_point(position="jitter") +
  facet_grid(. ~ Facet) +
  scale_y_continuous(name="Fluorescent intensity/arbitrary units") +
  scale_x_discrete(name="Test repeat") +
  stat_summary(fun.ymin=median, fun.ymax=median, fun.y=median, geom="crossbar")

যে কোনও সহায়তা অনেক প্রশংসিত।


30
ggplotডিফল্ট বিকল্পগুলি "স্পষ্টতই অগ্রহণযোগ্য" হিসাবে বর্ণনা করার ক্ষেত্রে সতর্ক থাকুন । আপনার অর্থ ভিন্ন ফর্ম্যাটের জন্য আপনার ব্যক্তিগত পছন্দ রয়েছে । বিন্যাসে একটি সংখ্যা 4e+05বৈজ্ঞানিক স্বরলিপি, এবং বিভিন্ন অ্যাপ্লিকেশন মধ্যে পছন্দসই বিন্যাস হবে।
অ্যান্ড্রি

53
4e + 05 বৈজ্ঞানিক স্বরলিপি নয়, এটি একটি বৈজ্ঞানিক স্বরলিপি কম্পিউটার অনুদর্শন। আমি ভাবতে পারি এমন কোনও মুদ্রণ জার্নালে এটি গ্রহণযোগ্য হবে না, তাই আমি আমার গবেষণার জন্য এটি অগ্রহণযোগ্য বলে বিবেচনা করি।
জ্যাক এইডলি

উত্তর:


126

অন্য বিকল্পটি হ'ল আপনার অক্ষের টিক লেবেলগুলিকে কমা দিয়ে ফর্ম্যাট করা হ'ল প্যাকেজটি ব্যবহার করে scalesএবং যুক্ত করুন

 scale_y_continuous(name="Fluorescent intensity/arbitrary units", labels = comma)

আপনার gpplot বিবৃতিতে।

আপনি যদি প্যাকেজটি লোড করতে না চান তবে ব্যবহার করুন:

scale_y_continuous(name="Fluorescent intensity/arbitrary units", labels = scales::comma)

9
আশ্চর্যজনক যে এ জাতীয় তুচ্ছ সমস্যার জন্য একটি নতুন প্যাকেজ লোড করা দরকার।
লুচোনাচো

এফওয়াইআই, এটি স্কেল_ই_লগ 10 (লেবেলগুলি = স্কেলগুলি :: কমা) এর সাথেও কাজ করে এবং আমি অন্যান্য স্কেলগুলি জিপিপ্লাট 2 তে ধরে নিচ্ছি। দুর্দান্ত টিপস!
দ্য প্রলেটারিয়েট

66

আমি এটি করার অন্য একটি উপায়ও পেয়েছি যা অক্ষের উপর সঠিক 'x10 (সুপারস্ক্রিপ্ট) 5' স্বরলিপি দেয়। কারও কারও পক্ষে এটি কার্যকর হতে পারে এই আশায় আমি এখানে এটি পোস্ট করছি। আমি থেকে কোড পেয়েছিলাম এখানে তাই আমি এটি জন্য কোন ক্রেডিট দাবী, যে ন্যায়ত ব্রায়ান Diggs চলে যায়।

fancy_scientific <- function(l) {
     # turn in to character string in scientific notation
     l <- format(l, scientific = TRUE)
     # quote the part before the exponent to keep all the digits
     l <- gsub("^(.*)e", "'\\1'e", l)
     # turn the 'e+' into plotmath format
     l <- gsub("e", "%*%10^", l)
     # return this as an expression
     parse(text=l)
}

যা আপনি তারপর হিসাবে ব্যবহার করতে পারেন

ggplot(data=df, aes(x=x, y=y)) +
   geom_point() +
   scale_y_continuous(labels=fancy_scientific) 

10
আপনি যদি "0 x 10⁺⁰" হিসাবে মুদ্রিত হতে চান না, তবে নীচের format(...)লাইনের নীচে যুক্ত করুন :l <- gsub("0e\\+00","0",l)
সেমি-এক্সট্রিনসিক

1
আপনি যদি অন্য বিষয়গুলিতে বিশেষ কিছু করতে চান তবে পৃথক কনসোলে আপনার কেসের জন্য কী পরিবর্তন আসে তা পরীক্ষা করার সময় এর gsub()পরে আরও সরাসরি যুক্ত করা সহজ । format()format()
আধা-বহিরাগত

3
এটি সর্বশেষ gsubকমান্ডের আগে যুক্ত করুন : # remove + after exponent, if exists. E.g.: (3x10^+2 -> 3x10^2) l <- gsub("e\\+","e",l)এবং এর পরে: # convert 1x10^ or 1.000x10^ -> 10^ l <- gsub("\\'1[\\.0]*\\'\\%\\*\\%", "", l)সাধারণত কাগজপত্রগুলিতে এটি বিন্যাসে ব্যবহৃত হয়।
জন_ ওয়েস্ট

44
x <- rnorm(10) * 100000
y <- seq(0, 1, length = 10)
p <- qplot(x, y)
library(scales)
p + scale_x_continuous(labels = comma)

আমি এটি চেষ্টা করার সময় আমি একটি ত্রুটি পাই যে ফর্ম্যাটরটি একটি অব্যক্ত যুক্তি? এটির জন্য অন্য প্যাকেজ বা কিছু দরকার?
জ্যাক এইডলি

4
আমি কোডটি অন্তর্ভুক্ত করতে library(scales)এবং ব্যবহার করার জন্য পরিবর্তন করেছি commaযা আমার আগের ফাংশনটির চেয়ে আরও ভাল কাজ করা উচিত।
ডিসক্রিট সার্কেল

16

আমি এখানে খেলতে দেরি করছি তবে ক্ষেত্রে অন্যরা সহজেই সমাধান চান, আমি এমন একটি ফাংশন তৈরি করেছিলাম যা বলা যেতে পারে:

 ggplot + scale_x_continuous(labels = human_gbp)

যা আপনাকে x বা y অক্ষের জন্য মানব পাঠযোগ্য সংখ্যা দেয় (বা সাধারণভাবে কোনও সংখ্যা)।

আপনি এখানে ফাংশনগুলি খুঁজে পেতে পারেন: গিথুব রেপো কেবল আপনার স্ক্রিপ্টে ফাংশনগুলি অনুলিপি করুন যাতে আপনি তাদের কল করতে পারেন।


10

আমি জ্যাক এইডলির প্রস্তাবিত উত্তরটি একটি দরকারী উত্তর পেয়েছি।

আমি অন্য একটি বিকল্প নিক্ষেপ করতে চেয়েছিলাম। ধরুন আপনার অনেকগুলি ছোট সংখ্যার একটি সিরিজ রয়েছে এবং অক্ষ অক্ষের লেবেলগুলি সম্পূর্ণ দশমিক পয়েন্ট (যেমন 5e-05 -> 0.0005) লিখেছেন তা নিশ্চিত করতে চান:

NotFancy <- function(l) {
 l <- format(l, scientific = FALSE)
 parse(text=l)
}

ggplot(data = data.frame(x = 1:100, 
                         y = seq(from=0.00005,to = 0.0000000000001,length.out=100) + runif(n=100,-0.0000005,0.0000005)), 
       aes(x=x, y=y)) +
     geom_point() +
     scale_y_continuous(labels=NotFancy) 

23
বেনামে ফাংশন ব্যবহার করে এটি সংক্ষিপ্ত করা যেতে পারে: scale_y_continuous(labels=function(n){format(n, scientific = FALSE)})কেন এর মতো কোনও পূর্বনির্ধারিত বিন্যাস নেই, নরক জানে।
eMPee584
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.