Thank you, better than before... On Thu, Aug 27, 2020 at 2:37 PM PIKAL Petr <petr.pi...@precheza.cz> wrote: > > Hi. > It is probably somewhere in docs, but factors are actually numerics vith > labels. > > So with your original data frame > > df$x <- factor(df$x) > plot(as.numeric(df$x), df$y) > > gives you points. You need to set labels to x axis though. > > Cheers > Petr > > > -----Original Message----- > > From: R-help <r-help-boun...@r-project.org> On Behalf Of Luigi Marongiu > > Sent: Thursday, August 27, 2020 2:16 PM > > To: r-help <r-help@r-project.org> > > Subject: [R] plot factors with dots in R > > > > Hello, > > I have a dataframe as follows: > > ``` > > x = c("0 pmol", "10 pmol", "100 pmol", "1000 pmol") > > y = c(0.9306, 1.8906, 2.2396, 2.7917) > > df = data.frame(x, y) > > > > > str(df) > > 'data.frame': 4 obs. of 2 variables: > > $ x: chr "0 pmol" "10 pmol" "100 pmol" "1000 pmol" > > $ y: num 0.931 1.891 2.24 2.792 > > ``` > > I would like to visualize the data with the classic dots (pch=16) but: > > ``` > > > plot(df$y ~ df$x) > > Error in plot.window(...) : need finite 'xlim' values > > In addition: Warning messages: > > 1: In xy.coords(x, y, xlabel, ylabel, log) : NAs introduced by coercion > > 2: In min(x) : no non-missing arguments to min; returning Inf > > 3: In max(x) : no non-missing arguments to max; returning -Inf > > ``` > > which is right because x is not numeric, so I took the factor: > > ``` > > plot(df$y ~ factor(df$x)) # gives bars instead of dots > > plot(df$y ~ factor(df$x), pch = 16) # this also > > ``` > > I tried to convert directly the dataframe: > > ``` > > df$x = lapply(df$x, factor) > > > str(df) > > 'data.frame': 4 obs. of 2 variables: > > $ x:List of 4 > > ..$ : Factor w/ 1 level "0 pmol": 1 > > ..$ : Factor w/ 1 level "10 pmol": 1 > > ..$ : Factor w/ 1 level "100 pmol": 1 > > ..$ : Factor w/ 1 level "1000 pmol": 1 > > $ y: num 0.931 1.891 2.24 2.792 > > > > > plot(r$y ~ r$x, pch = 16) > > Error in plot.window(...) : need finite 'xlim' values > > In addition: Warning messages: > > 1: In xy.coords(x, y, xlabel, ylabel, log) : NAs introduced by coercion > > 2: In min(x) : no non-missing arguments to min; returning Inf > > 3: In max(x) : no non-missing arguments to max; returning -Inf > > ``` > > If I try to pass the number of levels: > > ``` > > plot(df$y ~ factor(df$x, 1:4), pch = 16) # this draw a boxplot with > > all data on level 1 > > > > > df$x = lapply(df$x, factor(1:4)) > > Error in match.fun(FUN) : > > 'factor(1:4)' is not a function, character or symbol > > ``` > > > > Since the transformation has given only one level (1), my questions are: > > How do I tell R to use a dot instead of a line? > > What is the correct way of setting factors? > > > > > > -- > > Best regards, > > Luigi > > > > ______________________________________________ > > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > > https://stat.ethz.ch/mailman/listinfo/r-help > > PLEASE do read the posting guide http://www.R-project.org/posting- > > guide.html > > and provide commented, minimal, self-contained, reproducible code.
-- Best regards, Luigi ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.