Skip to content

Colorizing different individuals with fviz

6 messages · Mahmood Naderan-Tahan, Jim Lemon, PIKAL Petr +1 more

#
Hi

I use this command to generate a graph of individuals


ind <- get_famd_ind(res.famd)
fviz_famd_ind(res.famd, repel = TRUE)


I would like to know how can I specify different colors for different individuals?

The colorization is not very complex. Basically, I want to specify rows[1:10] to be shown in black and rows[11:20] to be shown in red.


Any idea about that?


Regards,
Mahmood
#
Hi Mahmood,
What you have specified can be done with:

col=c(rep("black",10),rep("red",10))

depending upon what print function you are using. I suspect that this
may be based on a value in your data. For example, if you want  black
for values of some variable up to 10 and red for those over:

col=ifelse(x>10,"red","black)

Jim

On Sun, Mar 28, 2021 at 12:20 AM Mahmood Naderan-Tahan
<mahmood.naderan at ugent.be> wrote:
1 day later
#
Hi.

You could probably use "col.ind.sup" for this task, however factoextra is
rather rigid in its properties. I still recommend plain prcomp and finetune
biplot with points.
Maybe not so fancy as factoextra but you could format points with shape,
size, colour to characterise some differences.

Cheers
Petr
rows[1:10] to
#
Hi Jim,

It seems that the following proposed method doesn't work


ind <- get_famd_ind(res.famd)
fviz_famd_ind(res.famd,
              col=ifelse(x>10,"red","black"),
              repel = TRUE)


Result is:


Error in fviz_famd_ind(res.famd, col = ifelse(x > 10, "red", "black"),  :
  argument 2 matches multiple formal arguments



Any idea to fix that?

Regards,
Mahmood
#
That error means that fviz_famd_ind has more than one argument that
starts with 'col' and you must type a more complete name to
disambiguate it.  Perhaps col.ind=ifelse(...)?
function (X, axes = c(1, 2), geom = c("point", "text"),
    repel = FALSE, habillage = "none", palette = NULL,
    addEllipses = FALSE, col.ind = "blue", col.ind.sup = "darkblue",
    alpha.ind = 1, shape.ind = 19, col.quali.var = "black",
    select.ind = list(name = NULL, cos2 = NULL, contrib = NULL),
    gradient.cols = NULL, ...)

On Mon, Mar 29, 2021 at 2:20 PM Mahmood Naderan-Tahan
<mahmood.naderan at ugent.be> wrote:
#
I understand that I came across this error after that


ind <- get_famd_ind(res.famd)
fviz_famd_ind(res.famd,
              col.ind = ifelse(ind>10,"red","black"),
              repel = TRUE)


Error in ifelse(ind > 10, "red", "black") :
  'list' object cannot be coerced to type 'double'
Calls: fviz_famd_ind -> %in% -> ifelse



I guess ind has (x,y) type and hence "ind>10" is not valid.

I also tried


col.ind = ifelse(ind.x>10,"red","black"),


But got the same error.

Any idea about that?



Regards,
Mahmood