I use ggplot2 to create a point plot and then I add the correlation coefficient to that chart. Next, I use plotly to see info about each data point. However, there is a mistake in font style in the plot as shown here.
I need R = 0.87 and P = 2.2e-16, not "italic(R)" or "italic(P)", while keeping mapping part in stat_cor. I guess, plotly cannot understand italic(p)
part as a code. The solution should not fix that adding a text manually, I need the calculation of "R" and "P".
Here is the code:
p1 <- ggplot(iris) +
geom_point(aes(Sepal.Length, Petal.Length)) +
stat_cor(mapping = aes(Sepal.Length, Petal.Length))
p2 <- ggplotly(p1)
p2
You can add anotations to the plotly chart - any sort of R functions and html code are going to work as part of the text.
A possible solution is using plotly directly, not using ggplot then converting.
The code would be:
p2 <- plot_ly(data = iris, x=~Sepal.Length, y = ~Petal.Length) |> #base R pipe operator
add_annotations(
xref = "paper", yref = "paper",
x = 0.1, y = 0.9,
text = paste0("<i>R</i> = ", round(cor(iris$Sepal.Length, iris$Petal.Length),2), "<br>",
"<i>P</i> = ", formatC(cor.test(iris$Sepal.Length, iris$Petal.Length)$p.value,
format="e", digits=2)),
showarrow = F, # Does not show an arrow indicating the text position
align = "left") #align the text left
p2
As you prefer to use ggplotly, the exact same annotation can be used on it. In this case, the code is:
p1 <- ggplot(iris) + geom_point(aes(Sepal.Length, Petal.Length))
p2 <- ggplotly(p1) |>
add_annotations(
xref = "paper", yref = "paper",
x = 0.01, y = 0.95,
text = paste0("<i>R</i> = ", round(cor(iris$Sepal.Length, iris$Petal.Length),2),
"<br>",
"<i>P</i> = ", formatC(cor.test(iris$Sepal.Length, iris$Petal.Length)$p.value,
format="e", digits=2)),
showarrow = F, # Does not show an arrow indicating the text position
align = "left") #align the text left
p2