Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

ggplot2 doesn't plot all the points

I am trying to make a graph in ggplot2 of 7 points in the shape of a circle, but trying to graph them only shows me 6 and I don’t know why this happens.

The code is the following:

# Function for the points
circleFun <- function(center = c(-1, 1), diameter = 1, npoints = 7) {
  r <- diameter / 2
  tt <- seq(0, 2 * pi, length.out = npoints)
  xx <- center[1] + r * cos(tt)
  yy <- center[2] + r * sin(tt)
  return(data.frame(x = xx, y = yy))
}

# example with 7 points
ej <- 
  circleFun(diameter = 50, center = c(50,50), npoints = 7)


# plot

ej |> 
  ggplot(aes(x = x, y = y)) +
  geom_point(alpha = 0.4) +
  theme_bw()

Does anyone know why this happens?

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

Rows 1 and 7 are identical, so their points are overlapped. The dot is a bit darker (per your alpha = 0.4). You can make this obvious by adding x = jitter(x) (For demonstration, not that you’d do that in production). I’m not sure what you’re expecting to see given the identical data.

If you want 7 distinct points, then I suggest you create n+1 and remove the last (or first) point.


circleFun <- function(center = c(-1, 1), diameter = 1, npoints = 7) {
  r <- diameter / 2
  tt <- seq(0, 2 * pi, length.out = npoints + 1)  # changed
  xx <- center[1] + r * cos(tt)
  yy <- center[2] + r * sin(tt)
  data.frame(x = xx, y = yy)[-1,,drop = FALSE]    # changed
}

## unchanged from here on
ej <- 
  circleFun(diameter = 50, center = c(50,50), npoints = 7)
ej |> 
  ggplot(aes(x = x, y = y)) +
  geom_point(alpha = 0.4) +
  theme_bw()

enter image description here

(BTW, there is no need for an explicit call to return(.), especially when it is the only end-point of the function and "obvious" based on data flow. It certainly doesn’t hurt, but it adds one step on the call stack that adds no value. It may be declarative/self-documenting, and as such this is a style/subjective point.)

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading