La fonction contour2D()
met à l'échelle les axes compris entre 0 et 1 par défaut. Pour obtenir différents axes, vous pouvez omettre les axes de l'appel contour2D()
original et les ajouter en utilisant axis()
avec at
et labels
spécifié. Si vous utilisez le factors
de cut()
, vous devrez les convertir en valeurs numériques avant de tracer. J'ai fourni un exemple ci-dessous où je génère des données, les tracer, puis ajuster les étiquettes des axes après la conversion des facteurs en valeurs numériques. Sans votre format de données exact, je ne connais pas le meilleur moyen d'extraire des étiquettes de marques de vos données.
# library for plot
library(plot3D)
# setting seed and generating some data
set.seed(10)
#### storing data in matrix ####
datamatrix <- matrix(c(rnorm(500,-1,.4),rnorm(500,2,0.2),runif(500,-3,0),runif(500,0,3)),nrow=1000,ncol=2,byrow=F)
# locations of cuts
xcuts <- seq(min(datamatrix[,1]),max(datamatrix[,1]),length.out = 6)
ycuts <- seq(min(datamatrix[,2]),max(datamatrix[,2]),length.out = 6)
# calculating values for cutting
xvals <- cut(datamatrix[,1], xcuts)
yvals <- cut(datamatrix[,2], ycuts)
# initializing matrix to store count in each bin
z <- matrix(0,length(levels(yvals)),length(levels(xvals)))
for(i in 1:length(levels(xvals))){
for(j in 1:length(levels(yvals))){
z[j,i] <- length(intersect(which(xvals == levels(xvals)[i]),which(yvals == levels(yvals)[j])))
}
}
#### finding labels from factors cut ####
factsx <- levels(xvals) # factsx <- levels_pc2_cut # or something like that
xlabsFacts <- rep(NA,length(factsx))
for(i in 1:(length(factsx))){
comma_sep <- unlist(gregexpr(pattern =',',factsx[i])) # location of the comma in the factor
#taking section of text and converting to numbers
xlabsFacts[i] <- as.numeric(substr(factsx[i],2,comma_sep-1))
xlabsFacts[i+1] <- as.numeric(substr(factsx[i],comma_sep+1,nchar(factsx[i])-1))
}
factsy <- levels(yvals) # factsy <- levels_pc1_cut # or something like that
ylabsFacts <- rep(NA,length(factsy))
for(i in 1:(length(factsy))){
comma_sep <- unlist(gregexpr(pattern =',',factsy[i])) # location of the comma in the factor
#taking section of text and converting to numbers
ylabsFacts[i] <- as.numeric(substr(factsy[i],2,comma_sep-1))
ylabsFacts[i+1] <- as.numeric(substr(factsy[i],comma_sep+1,nchar(factsy[i])-1))
}
#### formatting plot ####
# contour plot without axes
contour2D(z
,yaxt='n' # no y axis ticks
,xaxt='n' # no x axis ticks
,ylab='y values' # y axis label
,xlab='x values' # x axis label
)
# adding x axis with tick marks
axis(side=1 # bottom
,at=seq(0,1,length.out = length(xlabsFacts)) # change 6 to number of tick marks you want
,labels=round(xlabsFacts,2) # change to labels for tick marks from your data
)
# adding x axis with tick marks
axis(side=2 # bottom
,at=seq(0,1,length.out = length(ylabsFacts)) # change 6 to number of tick marks you want
,labels=round(ylabsFacts,2) # change to labels for tick marks from your data
)
I réussi à omettre les axes de contour2D mais quand j'ajoutant de l'axe x par> axe (côté = 1, à la SEQ = (0,1, length.out = 9), les étiquettes = round (pc2_cut, 2)), j'ai cette erreur: Erreur dans Math.factor (c (10L, 9L, 10L, 10L, 10L, 10L, 10L, 10L, 11L, 11L,: 'rond' non significatif pour les facteurs Savez-vous pourquoi? Merci! – HYY
@HYY, cochez 'class (pc_cut)' .Si c'est un "caractère" ', alors' R' le traite comme une chaîne de caractères. les emplacements de 'cut()', et vous pouvez ensuite les utiliser dans l'argument 'labels' avec round.Si vous ne voulez pas faire cela, vous devrez probablement utiliser' substr() 'pour prendre la partie number, et alors 'as.nu meric() 'pour en faire une valeur qui peut être arrondie. Vous pouvez également utiliser 'substr()' si vous ne voulez pas arrondir car les étiquettes peuvent être des chaînes. –
J'ai vérifié, c'est un facteur. – HYY