2013-10-27 21 views
20

मैं कोड का निम्न भाग का उपयोग कर एक ग्राफ की साजिश रचने कर रहा हूँ:जोड़ा जा रहा है खड़ी रेखा ggplot

library (ggplot2) 

png (filename = "graph.png") 
stats <- read.table("processed-r.dat", header=T, sep=",") 
attach (stats) 
stats <- stats[order(best), ] 
sp <- stats$A/stats$B 
index <- seq (1, sum (sp >= 1.0)) 
stats <- data.frame (x=index, y=sp[sp>=1.0]) 
ggplot (data=stats, aes (x=x, y=y, group=1)) + geom_line() 
dev.off() 

enter image description here

1 - कैसे एक साजिश है जो एक विशेष पर काटती है में एक ऊर्ध्वाधर पंक्ति जोड़ सकते हैं वाई का मूल्य (उदाहरण के लिए 2)?

2 - वाई-अक्ष 1 के बजाय 0.5 पर कैसे शुरू कर सकता है?

उत्तर

29

आप geom_vline() के साथ लंबवत रेखा जोड़ सकते हैं। आपके मामले में:

+ geom_vline(xintercept=2) 

आप अपने y अक्ष पर भी संख्या 0.5 देखने के लिए चाहते हैं, scale_y_continuous() जोड़ सकते हैं और पहला सवाल के बारे में limits= और breaks=

+ scale_y_continuous(breaks=c(0.5,1,2,3,4,5),limits=c(0.5,6)) 
+1

ऐसा लगता है कि ओपी लंबवत रेखा को "वाई के एक विशेष मूल्य पर" खींचना चाहता है। चीयर्स। – Henrik

+0

@ हेनरिक हां, आप सही हैं, मैं इस सवाल को गलत समझता हूं, लेकिन जेडएनके ने पहले ही उस समस्या का जवाब दिया है –

12

सेट:

यह जवाब है यह मानते हुए कि आपकी इच्छानुसार वाई का मूल्य विशेष रूप से आपके डेटा सेट में है। सबसे पहले, के रूप में मैं अपने डेटा सेट उपयोग नहीं कर सकते की एक प्रतिलिपि प्रस्तुत करने योग्य उदाहरण बना सकते हैं:

set.seed(9999) 
stats <- data.frame(y = sort(rbeta(250, 1, 10)*10 ,decreasing = TRUE), x = 1:250) 
ggplot(data=stats, aes (x=x, y=y, group=1)) + geom_line() 

initial plot

आप क्या करने की जरूरत विशिष्ट मूल्य के लिए खोज करने के लिए अपने डेटा फ्रेम में y कॉलम का उपयोग करना है। अनिवार्य रूप से आपको

ggplot(data=stats, aes (x=x, y=y, group=1)) + geom_line() + 
    geom_vline(xintercept = stats[stats$y == 2, "x"]) 

ऊपर उत्पन्न डेटा का उपयोग करने की आवश्यकता होगी, यहां एक उदाहरण है। चूंकि मेरे डेटा फ्रेम संभावना सही मूल्य 2 शामिल नहीं है, मैं इसके लिए खोज करने के लिए trunc समारोह का उपयोग करेगा:

stats[trunc(stats$y) == 2, ] 

#   y x 
# 9 2.972736 9 
# 10 2.941141 10 
# 11 2.865942 11 
# 12 2.746600 12 
# 13 2.741729 13 
# 14 2.693501 14 
# 15 2.680031 15 
# 16 2.648504 16 
# 17 2.417008 17 
# 18 2.404882 18 
# 19 2.370218 19 
# 20 2.336434 20 
# 21 2.303528 21 
# 22 2.301500 22 
# 23 2.272696 23 
# 24 2.191114 24 
# 25 2.136638 25 
# 26 2.067315 26 

अब हम जानते हैं कि जहां सभी 2 के मूल्यों कर रहे हैं। चूंकि यह ग्राफ कम हो रही है, हम इसे रिवर्स जाएगा, तो मान 2 के सबसे करीब शुरुआत में हो जाएगा:

rev(stats[trunc(stats$y) == 2, 1]) 

#   y x 
# 26 2.067315 26 

और हम निर्दिष्ट करने के लिए है कि मूल्य का उपयोग कर सकते है, जहां x अवरोधन होना चाहिए:

ggplot(data=stats, aes (x=x, y=y, group=1)) + geom_line() + 
    geom_vline(xintercept = rev(stats[trunc(stats$y) == 2, "x"])[1]) 

plot with vertical line

आशा है कि मदद करता है!

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