باستخدام ggplot2 كيف يمكنني تمثل نقطة وسطر في أسطورة

StackOverflow https://stackoverflow.com/questions/2253179

  •  20-09-2019
  •  | 
  •  

سؤال

وعن طريق ggplot2 أنا بالتآمر عدة وظائف وسلسلة من النقاط. أنا لا يمكن معرفة كيفية تمثيل النقاط على أسطورة. أنا أدرك أنني بحاجة لاستخدام الخدمات المعمارية والهندسية () وظيفة، ولكن أنا لا أفهم تماما كيفية القيام بذلك. أعتذر أن الأمثلة على ذلك منذ فترة طويلة، لكني لا أعرف كيف آخر لتوضيح ذلك.

## add ggplot2
library(ggplot2)

# Declare Chart values
y_label = expression("y_axis"~~bgroup("(",val / km^{2},")"))
x_label = "x_axis"

#############################
## Define functions
# Create a list to hold the functions
funcs <- list()
funcs[]

# loop through to define functions
for(k in 1:21){

# Make function name
funcName <- paste('func', k, sep = '' )

# make function
func = paste('function(x){exp(', k, ') * exp(x*0.01)}', sep = '')

funcs[[funcName]] = eval(parse(text=func))

}

    # Specify values
    yval = c(1:20)                              
    xval = c(1:20)                                

    # make a dataframe
    d = data.frame(xval,yval)

    # Specify Range
    x_range <- range(1,51)

# make plot
p <-qplot(data = d,
        x=xval,y=yval,        
        xlab = x_label, 
        ylab = y_label,
        xlim = x_range
        )+ geom_point(colour="green")


for(j in 1:length(funcs)){

p <- p + stat_function(aes(y=0),fun = funcs[[j]], colour="blue", alpha=I(1/5))

}

# make one function red
p <- p + stat_function(fun = funcs[[i]], aes(color="red"), size = 1) +
    scale_colour_identity("", breaks=c("red", "green","blue"),
    labels=c("Fitted Values", "Measured values","All values")) 

# position legend and make remove frame
p <- p + opts(legend.position = c(0.85,0.7), legend.background = theme_rect(col = 0)) 

print(p)     

وشكرا لكم مقدما - لقد تعلمت الكثير من هذا المجتمع على مدى الأيام القليلة الماضية

.
هل كانت مفيدة؟

المحلول

وانظر أدناه للحصول على حل. والفكرة الرئيسية هي ما يلي: تخيل نقطة وجود خط غير مرئي تحت لهم، وخطوط وجود نقطة غير مرئية. لذلك كل "سلسلة" يحصل على اللون والشكل وlinetype الصفات، وفي نهاية فإننا سوف نضع عليها يدويا إلى القيم الخفية (0 خطوط، NA للحصول على نقاط) عند الضرورة. ggplot2 سوف دمج الأساطير عن السمات الثلاث تلقائيا.

# make plot 
p <- qplot(data = d, x=xval, y=yval, colour="Measured", shape="Measured",
          linetype="Measured",  xlab = x_label,   ylab = y_label, xlim = x_range,
          geom="point") 

#add lines for functions 
for(j in 1:length(funcs)){ 
   p <- p + stat_function(aes(colour="All", shape="All", linetype="All"), 
                          fun = funcs[[j]],  alpha=I(1/5), geom="line")  
} 

# make one function special 
p <- p + stat_function(fun = funcs[[1]], aes(colour="Fitted", shape="Fitted",
                       linetype="Fitted"), size = 1, geom="line")

# modify look 
 p <- p +  scale_colour_manual("", values=c("green", "blue", "red")) + 
           scale_shape_manual("", values=c(19,NA,NA)) + 
           scale_linetype_manual("", values=c(0,1,1)) 

print(p) 

نصائح أخرى

وتحديد الجمالية لون لكل GEOM إلى ثابت قد تساعد. هنا مثال صغير:

require(ggplot2)
set.seed(666)
N<-20
foo<-data.frame(x=1:N,y=runif(N),z=runif(N))
p<-ggplot(foo)
p<-p+geom_line(aes(x,y,colour="Theory"))
p<-p+geom_point(aes(x,z,colour="Practice"))

#Optional, if you want your own colours
p<-p+scale_colour_manual("Source",c('blue','red'))

print(p)

وهذا غير معتمد أصلا في ggplot2، ولكن أنا على أمل سوف معرفة كيفية للحصول على إصدار المستقبل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top