একই এক্স স্কেল দিয়ে আমি দুটি উল্লম্বভাবে উল্লম্বভাবে কীভাবে স্ট্যাক করব, তবে আর এর মধ্যে একটি আলাদা y স্কেল করব?


9

গ্রিটিংস,

বর্তমানে আমি আর তে নিম্নলিখিতগুলি করছি:

require(zoo)
data <- read.csv(file="summary.csv",sep=",",head=TRUE)
cum  = zoo(data$dcomp, as.Date(data$date))
data = zoo(data$compressed, as.Date(data$date))
data <- aggregate(data, identity, tail, 1)
cum  <- aggregate(cum, identity, sum, 1)
days = seq(start(data), end(data), "day")
data2 = na.locf(merge(data, zoo(,days)))

plot(data2,xlab='',ylab='compressed bytes',col=rgb(0.18,0.34,0.55))
lines(cum,type="h",col=rgb(0,0.5,0))

সংক্ষিপ্তসার স্নিপ.সিএসভি:

date,revision,file,lines,nclass,nattr,nrel,bytes,compressed,diff,dcomp
2007-07-25,16,model.xml,96,11,22,5,4035,991,0,0
2007-07-27,17,model.xml,115,16,26,6,4740,1056,53,777
2007-08-09,18,model.xml,106,16,26,7,4966,1136,47,761
2007-08-10,19,model.xml,106,16,26,7,4968,1150,4,202
2007-09-06,81,model.xml,111,16,26,7,5110,1167,13,258
...

শেষ দুটি লাইনে আমার প্রয়োজনীয় তথ্যের প্লট করা হয়েছে এবং ফলাফলটি নিম্নলিখিতগুলির সাথে সাদৃশ্যপূর্ণ: বিকল্প পাঠ নীল লাইনটি আমার আগ্রহী নিদর্শনগুলির বাইটগুলির মধ্যে একটি প্রবেশপথ। সবুজ লাইনগুলি পরিবর্তনের এনট্রপি উপস্থাপন করে।

এখন, এই গ্রাফটিতে, এটি ভালভাবে কাজ করে কারণ আইশের মধ্যে বিশাল পার্থক্য নেই। তবে আমার অন্যান্য গ্রাফ রয়েছে যেখানে সবুজ রেখাগুলি এত ছোট হয়ে যায় যে এটি দেখতে পায় না।

আমি যে সমাধানটির সন্ধান করছিলাম, তাতে দুটি বিষয় জড়িত:

  1. সবুজ উল্লম্ব রেখাগুলিকে তার নিজস্ব y অক্ষের সাথে প্রথম একের ঠিক নীচে, দ্বিতীয় গ্রাফে স্থানান্তরিত করতে, তবে ভাগ করা x অক্ষটি হবে।
  2. এটি লগারিদমিক স্কেল সরবরাহ করার জন্য, যেহেতু আমি নির্দিষ্ট মানগুলির চেয়ে "মাত্রা" সম্পর্কে বেশি আগ্রহী।

আগাম ধন্যবাদ!

পিএস যদি কেউ আমাকে বলতে পারে যে আমি কীভাবে মাসগুলিকে উল্লেখ করে এক্স স্কেলে "মাইনর টিক্স" লাগাতে পারি, আমি প্রশংসা করি :-) যদি এটি কোনও একক পোস্টের জন্য খুব বেশি প্রশ্ন হয় তবে আমি তাদের আরও বিভাজন করতে পারি।

উত্তর:


15

আপনি par(new=TRUE)দুটি ভিন্ন y- অক্ষ ব্যবহার করে একই গ্রাফে প্লট করতে পারেন ! এটিও আপনার সমস্যার সমাধান করা উচিত।

এর পরে আপনি একটি সহজ উদাহরণ পাবেন যা দুটি র্যান্ডম স্বাভাবিক ভেরিয়েবল প্লট করে, একটিতে একই গড়তে অন্যটি গড় হিসাবে 100 (উভয় এসডি এস = 1) একই প্লটে থাকে। প্রথমটি বাম y- অক্ষের উপর লাল, দ্বিতীয়টি ডান y- অক্ষের নীল রঙে। তারপরে, অক্ষ লেবেল যুক্ত করা হয়।

আপনি এখানে যান:

x <- 1:10
y1 <- rnorm(10)
y2 <- rnorm(10)+100

plot(x,y1,pch=0,type="b",col="red",yaxt="n",ylim=c(-8,2))
par(new=TRUE)
plot(x,y2,pch=1,type="b",col="blue",yaxt="n",ylim=c(98,105))

axis(side=2)
axis(side=4)

এটির মতো দেখতে (বাম অক্ষের উপরে লাল মনে করুন, ডান অক্ষে নীল): বিকল্প পাঠ

আপডেট:
মন্তব্যের ভিত্তিতে আমি আমার গ্রাফের একটি আপডেট সংস্করণ তৈরি করেছি। অক্ষের লেবেল এবং ফাংশনের উন্নত ব্যবহার দেখানোর জন্য par(mar=c(a,b,c,d)), আমি গ্রাফের চারপাশে একটি বৃহত্তর মার্জিন তৈরি করতে (ডান অক্ষ অক্ষের লেবেলের জন্য প্রয়োজনীয়) ব্যবহার করে বেস গ্রাফ কার্যকারিতাটিতে আরও গভীর গর্ত করি :mtextaxis

x <- 1:100
y1 <- rnorm(100)
y2 <- rnorm(100)+100

par(mar=c(5,5,5,5))

plot(x,y1,pch=0,type="b",col="red",yaxt="n",ylim=c(-8,2),ylab="")
axis(side=2, at=c(-2,0,2))
mtext("red line", side = 2, line=2.5, at=0)

par(new=TRUE)
plot(x,y2,pch=1,type="b",col="blue",yaxt="n",ylim=c(98,108), ylab="")
axis(side=4, at=c(98,100,102), labels=c("98%","100%","102%"))
mtext("blue line", side=4, line=2.5, at=100)

বিকল্প পাঠ

আপনি দেখতে এটি বেশ সোজা এগিয়ে। আপনি আপনার ডেটার অবস্থান বর্ণনা করতে পারেন ylimমধ্যে plotফাংশন, তারপর ব্যবহার atমধ্যে axisফাংশন যা অক্ষ ticks আপনি দেখতে চাও নির্বাচন করতে। উপরন্তু, আপনি এমনকি মাধ্যমে অক্ষ টিক (নামমাত্র x- অক্ষ জন্য বেশ দরকারী) জন্য লেবেল প্রদান করতে পারেন labelsমধ্যে axisফাংশন (ডান অক্ষের উপর এখানে কাজ)। অক্ষ লেবেল যোগ করার জন্য, ব্যবহার mtextসঙ্গে at(উল্লম্ব পজিশনিং জন্য lineঅনুভূমিক পজিশনিং জন্য)।

নিশ্চিত পরীক্ষা করুন ?plot, ?par, ?axis, এবং ?mtextআরও তথ্যের জন্য।
দুর্দান্ত ওয়েব সংস্থানগুলি হ'ল: গ্রাফগুলির জন্য কুইক-আর : 1 , 2 এবং 3


এটি আকর্ষণীয়, তবে আমরা কীভাবে পাঠককে বলতে পারি কোন স্কেলটি কোন লাইনের সাথে মিলে যায়?
হুগো সেরেনো ফেরেরিরা

এই গ্রাফটি দেখুন: imgur.com/K8BCr.png সেখানে, আমরা কেবলমাত্র ওয়াই-অক্ষের লেবেল এবং টিকগুলি উপস্থাপন করি যেখানে তারা ডেটা প্রয়োগ করে (যেমন, গ্রাফের উপরের বাম অক্ষের জন্য, সম্পর্কিত ডেটা হিসাবে, এবং গ্রাফের নীচে ডান অক্ষের জন্য, কর্ডোডিং ডেটা হিসাবে)। অতিরিক্তভাবে আমরা বিভিন্ন বর্ণ (যেমন উপরের উদাহরণে) এবং লাইন প্রকারগুলি ব্যবহার করেছি এবং ক্যাপশনে এটি ব্যাখ্যা করেছি। পার্থক্য পরিষ্কার করার জন্য আপনি বামদিকে লাইন চার্ট এবং ডান অক্ষে একটি বার চার্ট ব্যবহার করতে পারেন।
হেনরিক

আপনি যে উদাহরণটি দিয়েছেন তা খুব ভাল ... আপনি প্রতিটি অক্ষকে উল্লম্বভাবে কীভাবে পরিচালনা করতে পারেন?
হুগো সেরেনো ফেরেরিরা

2
সত্যিই ভাল উদাহরণ। আপনার গ্রাফের সাথে একমাত্র ইস্যুটি হ'ল উভয় ভেরিয়েবলের নাম ওভারল্যাপিং। এই ক্ষেত্রে আপনি একটি বাম দিকে এবং অন্যটি ডানদিকে (সম্ভবত এমনকি একটি উল্লম্ব অবস্থানেও) চাইবেন। "সত্যই ভাল" থেকে "নিখুঁত" হিসাবে আপনার উদাহরণটি আপগ্রেড করতে, আপনি চলক নামগুলি করতে আর থেকে ম্যাটেক্সট ফাংশনটি ব্যবহার করতে চান
ডেভ কেলেন

@ হুগো @ ডেভ: উভয় মন্তব্যের সমন্বয়ের জন্য আমার আপডেট দেখুন।
হেনরিক

12

আমি মনে করি আপনি যা ব্যবহার করতে চান তা পেতে পারেন ggplot2। নীচের কোডটি ব্যবহার করে, আমি উত্পাদন করতে পারি:

বিকল্প পাঠ

স্পষ্টতই লাইন রঙগুলির মতো জিনিসগুলি আপনি যা চান পরিবর্তন করতে পারবেন। এক্স-অক্ষে আমি কয়েক বছরের বড় লাইনগুলি এবং মাসগুলিতে ছোটখাট রেখা নির্দিষ্ট করে দিয়েছি।

require(ggplot2)
t = as.Date(0:1000, origin="2008-01-01")  
y1 = rexp(1001)
y2 = cumsum(y1)
df = data.frame(t=t, values=c(y2,y1), type=rep(c("Bytes", "Changes"), each=1001))

g = ggplot(data=df, aes(x=t, y=values)) +
  geom_line() +
  facet_grid(type ~ ., scales="free") +
  scale_y_continuous(trans="log10") +
  scale_x_date(major="years", minor="months") +
  ylab("Log values")
g

আহ, আমি ডিএফ = ডেটা ফ্রেম (টি = দিন, মান = সি (ডেটা 2, কাম), টাইপ = রেপ (সি ("বাইটস", "পরিবর্তনগুলি", প্রতিটি = 1001)) সেট করার চেষ্টা করেছি, তবে এটি একটি দেয় Rbind.zoo (...) এ ত্রুটি: সূচকগুলি ওভারল্যাপ করে
হুগো সেরেনো

এটি কারণ ডেটা 2 এবং কাম চিড়িয়াখানা অবজেক্ট। কাঁচা মান পেতে as.vector (ডেটা 2) ব্যবহার করুন। এছাড়াও, আমি 1001 ব্যবহার করেছি কারণ আমার 1001 টি পর্যবেক্ষণ ছিল। আপনার আলাদা কিছু দরকার হবে।
csgillespie

এখানে নুব আর ব্যবহারকারী: ডাটা.ফ্রেমে ত্রুটি (t = দিন, মান = সি (as.vector (ডেটা 2), as.vector (কাম)): যুক্তিগুলি সারিগুলির পৃথক সংখ্যাকে বোঝায়: 1063, 1300, 2
হুগো সেরেনো ফেরেইরা

আপনার ডেটা দেখতে "দিন", "ডেটা 2" এবং "কাম" টাইপ করুন। তারপরে "দৈর্ঘ্য (দিন)" ইত্যাদি দেখুন আপনার মানগুলির সাথে সময় পয়েন্টগুলি মিলিয়ে নেওয়া দরকার।
csgillespie
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.