如何在y轴上绘制每行的最小值和最大值?

时间:2014-02-22 12:49:05

标签: r plot max min

我是新手并且学习R并且在绘制矩阵的最小值和最大值时遇到了问题。 矩阵是这样的:

X Y1 Y2 Y3 Y4 Y5

1 0.5 0.6 0.3 0.3 0.2

2 0.3 0.4 0.1 0.7 0.4

3 0.4 0.3 0.5 0.6 0.3

现在我想将第一列(X)绘制为x轴,并选出每行的最小值和最大值(例如X=1Ymin=0.2Ymax=0.6在第一行),并将它们绘制为y轴。

有人可以帮我解决一下吗?

4 个答案:

答案 0 :(得分:1)

使用rbind和2应用函数的解决方案(最小和最大)(肯定不是最好的):

mat <- as.matrix(read.table(header = T, text = "X Y1 Y2 Y3 Y4 Y5

1 0.5 0.6 0.3 0.3 0.2

2 0.3 0.4 0.1 0.7 0.4

3 0.4 0.3 0.5 0.6 0.3"))

mat2 <- t(rbind(X = mat[ ,1], Ymin = apply(mat[ ,-1], 1, min), Ymax = apply(mat[ ,-1], 1, max)))

matplot(mat2[ ,1], mat2[ ,-1], pch = 20, cex = 1.5)

答案 1 :(得分:1)

例如,使用pminpmax

mn = Reduce(pmin,as.list(dat[,-1]))
mx = Reduce(pmax,as.list(dat[,-1]))
library(lattice)
xyplot(mn+mx~x,data.frame(x= dat[,1],mn=mn,mx=mx),
   type='l',auto.key=T,
   ylab=list(label="max and min"))

enter image description here

dat是:

dat <- 
  read.table(text='
X Y1 Y2 Y3 Y4 Y5
1 0.5 0.6 0.3 0.3 0.2
2 0.3 0.4 0.1 0.7 0.4
3 0.4 0.3 0.5 0.6 0.3',header=TRUE)

答案 2 :(得分:1)

考虑到你想要一个散点图,这是一种可能性。

#reading your data
table =  read.table(header=TRUE, text="
             X Y1 Y2 Y3 Y4 Y5
             1 0.5 0.6 0.3 0.3 0.2
             2 0.3 0.4 0.1 0.7 0.4
             3 0.4 0.3 0.5 0.6 0.3", sep= " ")

#using a for loop to filter only data to be used in the plot (X, Min_Y, Max_Y)
df = data.frame(X=NA,min_Y=NA,max_Y=NA)

for (i in c(1:length(df))) {

X = table[i,1] #X values from table
min_Y = c(min(table[i,c(2:6)])) #minimum values inside table columns 2 to 6
max_Y = c(max(table[i,c(2:6)])) #maximum values inside table columns 2 to 6

df = rbind(df,c(X,min_Y,max_Y)) #new df with X, Min_Y, Max_Y

}

df = df[-1,]
df #df results

  X min_Y max_Y
2 1   0.2   0.6
3 2   0.1   0.7
4 3   0.3   0.6

#produce scatterplot with R package ggplot2
library(ggplot2)

ggplot(df) + 
  geom_point(aes(x=X,y=min_Y),colour="red") + 
  geom_point(aes(x=X,y=max_Y),colour="blue") +
  ylab("Y") +
  theme_bw()

enter image description here

答案 3 :(得分:1)

所以这是(另一种......)获取列式min和max(使用m作为矩阵)的方法。

z <- t(apply(m,1,
             function(x)return(c(x[1],min=min(x[2:length(x)]),max=max(x[2:length(x)])))))
z <- data.frame(z)
z
#      X min max
# [1,] 1 0.2 0.6
# [2,] 2 0.1 0.7
# [3,] 3 0.3 0.6

从这里开始,绘图很简单。

plot(z$X, z$max, ylim=c(min(z$min),max(z$max)),col="blue")
points(z$X, z$min, col="red")