library(dplyr)
library(ggplot2)
# Create a data frame
set.seed(123)
data <- data.frame(
numbers = rpois(100, 30)
)
ggplot(data=data, aes(numbers)) + geom_bar(colour='black', fill='grey')

# Prepare Q-Q plot data
qq_data <- data %>%
arrange(numbers) %>% # Step 1: Arrange the numbers in ascending order
mutate(
rank = seq(1, n()), # Step 2: Rank each number from 1 to n
prob = (rank - 0.5) / n(), # Step 3: Calculate empirical cumulative probability
theoretical_quantile = qpois(prob,30) # Step 4: Calculate theoretical quantiles
)
qq_data
# Calculate slope and intercept for the Q-Q line
q1_obs <- quantile(qq_data$numbers, probs = 0.25)
q3_obs <- quantile(qq_data$numbers, probs = 0.75)
q1_theo <- qpois(0.25,30)
q3_theo <- qpois(0.75,30)
slope <- (q3_obs - q1_obs) / (q3_theo - q1_theo)
intercept <- q1_obs - slope * q1_theo
# Create the Q-Q plot
(qq_plot <- ggplot(data = qq_data, aes(x = theoretical_quantile, y = numbers)) +
geom_point(fill = 'green', color = '#203147', shape = 21, size = 2) + # Points with a border
labs(title = "Q-Q Plot") +
geom_abline(slope = slope, intercept = intercept, color = '#203147', linetype = "dashed"))

LS0tCnRpdGxlOiAiUVEgUGxvdCBmb3IgUG9pc3NvbiBEaXN0cmlidXRpb24iCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCmBgYHtyfQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KGdncGxvdDIpCmBgYAoKCgpgYGB7cn0KIyBDcmVhdGUgYSBkYXRhIGZyYW1lCnNldC5zZWVkKDEyMykKZGF0YSA8LSBkYXRhLmZyYW1lKAogIG51bWJlcnMgPSBycG9pcygxMDAsIDMwKQogICkKYGBgCgoKYGBge3J9CmdncGxvdChkYXRhPWRhdGEsIGFlcyhudW1iZXJzKSkgKyBnZW9tX2Jhcihjb2xvdXI9J2JsYWNrJywgZmlsbD0nZ3JleScpCmBgYAoKCmBgYHtyfQojIFByZXBhcmUgUS1RIHBsb3QgZGF0YQpxcV9kYXRhIDwtIGRhdGEgJT4lCiAgYXJyYW5nZShudW1iZXJzKSAlPiUgICMgU3RlcCAxOiBBcnJhbmdlIHRoZSBudW1iZXJzIGluIGFzY2VuZGluZyBvcmRlcgogIG11dGF0ZSgKICAgIHJhbmsgPSBzZXEoMSwgbigpKSwgIyBTdGVwIDI6IFJhbmsgZWFjaCBudW1iZXIgZnJvbSAxIHRvIG4KICAgIHByb2IgPSAocmFuayAtIDAuNSkgLyBuKCksICMgU3RlcCAzOiBDYWxjdWxhdGUgZW1waXJpY2FsIGN1bXVsYXRpdmUgcHJvYmFiaWxpdHkKICAgIHRoZW9yZXRpY2FsX3F1YW50aWxlID0gcXBvaXMocHJvYiwzMCkgIyBTdGVwIDQ6IENhbGN1bGF0ZSB0aGVvcmV0aWNhbCBxdWFudGlsZXMKICApCmBgYAoKCmBgYHtyfQpxcV9kYXRhCmBgYAoKYGBge3J9CiMgQ2FsY3VsYXRlIHNsb3BlIGFuZCBpbnRlcmNlcHQgZm9yIHRoZSBRLVEgbGluZQpxMV9vYnMgPC0gcXVhbnRpbGUocXFfZGF0YSRudW1iZXJzLCBwcm9icyA9IDAuMjUpCnEzX29icyA8LSBxdWFudGlsZShxcV9kYXRhJG51bWJlcnMsIHByb2JzID0gMC43NSkKcTFfdGhlbyA8LSBxcG9pcygwLjI1LDMwKQpxM190aGVvIDwtIHFwb2lzKDAuNzUsMzApCnNsb3BlIDwtIChxM19vYnMgLSBxMV9vYnMpIC8gKHEzX3RoZW8gLSBxMV90aGVvKQppbnRlcmNlcHQgPC0gcTFfb2JzIC0gc2xvcGUgKiBxMV90aGVvCmBgYAoKCmBgYHtyfQojIENyZWF0ZSB0aGUgUS1RIHBsb3QKKHFxX3Bsb3QgPC0gZ2dwbG90KGRhdGEgPSBxcV9kYXRhLCBhZXMoeCA9IHRoZW9yZXRpY2FsX3F1YW50aWxlLCB5ID0gbnVtYmVycykpICsKICBnZW9tX3BvaW50KGZpbGwgPSAnZ3JlZW4nLCBjb2xvciA9ICcjMjAzMTQ3Jywgc2hhcGUgPSAyMSwgc2l6ZSA9IDIpICsgICMgUG9pbnRzIHdpdGggYSBib3JkZXIKICBsYWJzKHRpdGxlID0gIlEtUSBQbG90IikgKwogIGdlb21fYWJsaW5lKHNsb3BlID0gc2xvcGUsIGludGVyY2VwdCA9IGludGVyY2VwdCwgY29sb3IgPSAnIzIwMzE0NycsIGxpbmV0eXBlID0gImRhc2hlZCIpKQpgYGAKCgoKCgoK