मैं साजिश आर में (graphics::plot
का प्रयोग करके) वेइबुल भूखंडों प्रदर्शित करने के लिए एक अनुसंधान पैकेज का निर्माण कर रहा हूँ एक लॉग-बदल एक्स धुरी और एक वेइबुल-बदल y धुरी (एक बेहतर वर्णन की कमी के लिए) है। दो-पैरामीटर वेबुल वितरण को इस साजिश पर सीधी रेखा के रूप में दर्शाया जा सकता है।ग्राफिक्स :: प्लॉट() अक्ष को किसी भी परिवर्तन के साथ स्केल/ट्रांसफॉर्म कैसे करें, न केवल लॉगरिदमिक (वेबुल प्लॉट्स के लिए)?
एक्स धुरी के लघुगणक परिवर्तन plot()
या curve()
करने के लिए log="x"
पैरामीटर जोड़ने के रूप में सरल है। मैं वाई -axis परिवर्तन को एक सुरुचिपूर्ण तरीके से कैसे आपूर्ति कर सकता हूं, ताकि सभी ग्राफिक्स से संबंधित साजिश मेरे अक्ष-रूपांतरित प्लॉट पर काम करेगी? प्रदर्शित करने के लिए मैं क्या जरूरत है, निम्न उदाहरण कोड चलाएँ:
## initialisation ##
beta <- 2;eta <- 1000
ticks <- c(seq(0.01,0.09,0.01),(1:9)/10,seq(0.91,0.99,0.01))
F0inv <- function (p) log(qweibull(p, 1, 1))
# this is the transformation function
F0 <- function (q) exp(-exp(q))
# this is the inverse of the transformation function
weibull <- function(x)pweibull(x,beta,eta)
# the curve of this function represents the weibull distribution
# as a straight line on weibull paper
weibull2 <- function(x)F0inv(weibull(x))
पहले एक नियमित रूप से, untransformed भूखंड पर beta=2
और eta=1000
के साथ एक वेइबुल बंटन का एक उदाहरण:
## untransformed axes ##
curve(weibull ,xlim=c(100,1e4),ylim=c(0.01,0.99))
abline(h=ticks,col="lightgray")
यह प्लॉट वेबुल विश्लेषण के लिए बेकार है। यहां मेरा वर्तमान कार्यान्वित समाधान है जो डेटा F0inv()
के साथ डेटा को बदलता है और साजिश के वाई-संशोधित करता है। ध्यान दें कि मुझे का उपयोग सभी y -axis संबंधित डेटा पर करना है।
## transformed axis with F0inv() ##
curve(weibull2,xlim=c(100,1e4),ylim=F0inv(c(0.01,0.99)),log="x",axes=F)
axis(1);axis(2,at=F0inv(ticks),labels=ticks)
abline(h=F0inv(ticks),col="lightgray")
यह काम करता है, लेकिन यह बहुत उपयोगकर्ता के अनुकूल नहीं है: जब उपयोगकर्ता टिप्पणियां जोड़ने के लिए चाहता है, एक हमेशा का उपयोग करना चाहिए F0inv()
:
text(300,F0inv(0.4),"at 40%")
मैं पाया कि आप ggplot2
और स्केल का उपयोग करके मेरी समस्या का समाधान प्राप्त कर सकते हैं, लेकिन मैं अब तक ग्राफिक्स पैकेज में बदलना नहीं चाहता बहुत जरूरी है क्योंकि बहुत से अन्य कोड को फिर से लिखना होगा।
## with ggplot2 and scales ##
library(ggplot2)
library(scales)
weibull_trans <- function()trans_new("weibull", F0inv, F0)
qplot(c(100,1e4),xlim=c(100,1e4),ylim=c(0.01,0.99),
stat="function",geom="line",fun=weibull) +
coord_trans(x="log10",y = "weibull")
मुझे लगता है कि अगर मैं गतिशील मेरे अपने साथ लघुगणक परिवर्तन लागू करने के लिए कोड की जगह सकता है, मेरी समस्या हल की जाएगी।
मैंने उपयोगी परिणामों के बिना "आर अक्ष रूपांतरण", "आर उपयोगकर्ता समन्वय", "आर अक्ष स्केलिंग" द्वारा अधिक जानकारी प्राप्त करने का प्रयास किया। लगभग हर चीज जो मैंने पाया है लॉगरिदमिक स्केल के साथ निपटाया।
मैंने plot()
को log="x"
पैरामीटर कैसे काम करता है, इस पर ध्यान देने की कोशिश की, लेकिन plot.window
के लिए प्रासंगिक कोड सी में लिखा गया है - मेरा सबसे मजबूत बिंदु बिल्कुल नहीं।
मैं दिलचस्पी होगी अगर किसी के साथ आता है एक बेहतर समाधान, लेकिन मुझे लगता है कि आपने प्रासंगिक जमीन को कवर किया है; मुझे नहीं लगता कि आप इससे बेहतर करने जा रहे हैं - 'ggplot2' के बाहर मैं सामान्य अक्ष परिवर्तन के लिए किसी भी सिस्टम के बारे में नहीं जानता। –
जवाब देने के लिए समय निकालने के लिए धन्यवाद। इस बीच, मैं एक ही निष्कर्ष पर आया, ऐसा लगता है कि मुझे ggplot2 का उपयोग करने के लिए मजबूर किया जाएगा। – user2257135