Michael Bird - 4 months ago 27

R Question

I'm trying to generate a ggplot only C.D.F. plot for some of my data. I am also looking to be able to plot an arbitrary number of percentiles as points on top. I have a solution that works for adding a single point to my curve but fails for multiple values.

This works for plotting one percentile value

`TestDf <- as.data.frame(rnorm(1000))`

names(TestDf) <- c("Values")

percentiles <- c(0.5)

ggplot(data = TestDf, aes(x = Values)) +

stat_ecdf() +

geom_point(aes(x = quantile(TestDf$Values, percentiles),

y = percentiles))

However this fails

`TestDf <- as.data.frame(rnorm(1000))`

names(TestDf) <- c("Values")

percentiles <- c(0.25,0.5,0.75)

ggplot(data = TestDf, aes(x = Values)) +

stat_ecdf() +

geom_point(aes(x = quantile(TestDf$Values, percentiles),

y = percentiles))

With error

Error: Aesthetics must be either length 1 or the same as the data (1000): x, y

How can I add an arbitrary number of points to a

`stat_ecdf()`

Answer Source

You need to define a new dataset, outside of the aesthetics. `aes`

refers to the original dataframe that you used for making the CDF (in the original `ggplot`

argument).

```
ggplot(data = TestDf, aes(x = Values)) +
stat_ecdf() +
geom_point(data = data.frame(x=quantile(TestDf$Values, percentiles),
y=percentiles), aes(x=x, y=y))
```