मैं एक ही एक्स स्केल के साथ दो ग्राफ़ों को लंबवत रूप से कैसे ढेर कर सकता हूं, लेकिन आर में एक अलग वाई स्केल?


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. इसे एक लघुगणक पैमाने प्रदान करने के लिए, क्योंकि मैं विशिष्ट मूल्यों की तुलना में "परिमाण" में अधिक रुचि रखता हूं।

अग्रिम में धन्यवाद!

PS अगर कोई मुझे यह भी बता सकता है कि मैं महीनों के संदर्भ में एक्स स्केल में "मामूली टिक" कैसे डाल सकता हूं, तो मैं सराहना करता हूं :-) यदि ये एक ही पोस्ट के लिए बहुत अधिक प्रश्न हैं, तो मैं उन्हें आगे विभाजित कर सकता हूं।

जवाबों:


15

आप par(new=TRUE)दो अलग-अलग y- कुल्हाड़ियों का उपयोग करके एक ही ग्राफ में साजिश कर सकते हैं ! इससे आपकी समस्या का समाधान भी होना चाहिए।

आगे आपको एक सरल उदाहरण मिलेगा जो दो यादृच्छिक सामान्य चर को प्लॉट करता है, एक का मतलब 0 पर दूसरा होता है और एक ही प्लॉट में माध्य 100 (दोनों sd s = 1)। बाएं वाई-अक्ष पर लाल में पहला, दाएं वाई-अक्ष पर नीले रंग में दूसरा है। फिर, अक्ष लेबल जोड़े जाते हैं।

हेयर यू गो:

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))चारों ओर एक बड़ा मार्जिन (सही अक्ष लेबल के लिए आवश्यक) बनाने के लिए, बेस mtextलेबल और axisफ़ंक्शन के उन्नत उपयोग को दिखाने के लिए बेस ग्राफ कार्यक्षमता में थोड़ा गहरा खुदाई करता हूं :

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समारोह जो अक्ष टिक्स आप देखना चाहते हैं का चयन करें। इसके अलावा, आप भी माध्यम से धुरी टिक (सांकेतिक x- अक्ष के लिए बहुत उपयोगी) के लिए लेबल प्रदान कर सकते हैं labelsमें axisसमारोह (सही अक्ष पर यहाँ किया)। अक्ष लेबल जोड़ने mtextके atलिए, ऊर्ध्वाधर स्थिति ( lineक्षैतिज स्थिति के लिए) के साथ उपयोग करें ।

यकीन है कि जाँच करने के लिए सुनिश्चित करें ?plot, ?par, ?axis, और ?mtextअधिक जानकारी के लिए।
महान वेब संसाधन हैं: ग्राफ़ के लिए क्विक-आर : 1 , 2 , और 3


यह दिलचस्प है, लेकिन हम पाठक को कैसे बताते हैं कि कौन सा पैमाना किस रेखा से मेल खाता है?
ह्यूगो सेरेनो फरेरा

इस ग्राफ़ पर एक नज़र डालें: imgur.com/K8BCr.png वहाँ, हम y- अक्ष लेबल प्रस्तुत करते हैं और केवल जहाँ वे डेटा के लिए लागू होते हैं (यानी, ग्राफ़ के शीर्ष पर बाईं अक्ष के लिए, संबंधित डेटा के रूप में,) और ग्राफ के तल पर दाईं ओर धुरी के लिए, डेटा के रूप में)। इसके अतिरिक्त हमने अलग-अलग रंगों का उपयोग किया (जैसा कि ऊपर के उदाहरण में है) और रेखा प्रकार और इसे कैप्शन में समझाया। आप अंतर को स्पष्ट करने के लिए बाईं ओर एक रेखा चार्ट और दाईं धुरी पर एक बार चार्ट का उपयोग भी कर सकते हैं।
हेनरिक

आपके द्वारा दिया गया उदाहरण बहुत अच्छा है ... आपने प्रत्येक अक्ष को लंबवत कैसे बनाया?
ह्यूगो सेरेनो फेरेरा

2
वास्तव में अच्छा उदाहरण है। आपके ग्राफ के साथ एकमात्र मुद्दा यह है कि दोनों वाई चर नाम अतिव्यापी हैं। इस मामले में आप एक को बाईं ओर और दूसरे को दाईं ओर (संभवतः एक ऊर्ध्वाधर स्थिति में भी) चाहेंगे। अपने उदाहरण को "वास्तव में अच्छा" से "परिपूर्ण" में अपग्रेड करने के लिए, आप आर से mtext फ़ंक्शन का उपयोग चर नाम करने के लिए कर सकते हैं
डेव कालेन

@ ह्यूगो @ डेव: दोनों टिप्पणियों के समावेश के लिए मेरा अपडेट देखें।
हेनरिक

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

उह, मैंने df = data.frame (t = days, values ​​= c (data2, cum), type = rep (c ("बाइट्स", "चेंजेस"), प्रत्येक = 1001) सेट करने की कोशिश की, लेकिन यह एक देता है Rbind.zoo (...) में त्रुटि: अनुक्रमित ओवरलैप
ह्यूगो सेरेनो फेरेरा

ऐसा इसलिए है क्योंकि डेटा 2 और सह चिड़ियाघर की वस्तुएं हैं। कच्चे मान प्राप्त करने के लिए as.vector (data2) का उपयोग करें। इसके अलावा, मैंने 1001 का उपयोग किया क्योंकि मेरे पास 1001 अवलोकन थे। आपको कुछ अलग करने की आवश्यकता होगी।
csgillespie

Noob R उपयोगकर्ता यहाँ: डेटा में त्रुटि। t (दिन = दिन, मान = c (as.vector (data2), as.vector (सह)),: तर्क अलग-अलग पंक्तियों की संख्या: 1063, 1300, 2
ह्यूगो सेरेनो फेरेरा

अपने डेटा को देखने के लिए "दिन", "डेटा 2" और "सह" टाइप करें। फिर "लंबाई (दिन)" आदि को देखें। आपको मूल्यों के साथ समय बिंदुओं का मिलान करने की आवश्यकता है।
csgillespie
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.