[R] plot factors with dots in R

Rui Barradas ru|pb@rr@d@@ @end|ng |rom @@po@pt
Thu Aug 27 18:08:15 CEST 2020


Hello,

The plots that you say give bars (or my equivalent version below) don't 
give bars, what they give are boxplots with just one value and the 
median Q1 and Q3 are all equal.

plot(y ~ factor(x), df, pch = 16)  # boxplot


Is the following what you are looking for?


plot(y ~ as.integer(factor(x)), df, pch = 16, xlab = "x", xaxt = "n")
axis(1, at = as.integer(factor(df$x)), labels = df$x)


Hope this helps,

Rui Barradas


Às 13:16 de 27/08/20, Luigi Marongiu escreveu:
> 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?
> 
>



More information about the R-help mailing list