Home > database >  Is there any solution for font size?
Is there any solution for font size?

Time:12-12

enter image description here I use ggplot2 for point plot and correlation cooefficient and plotly to see info about each point, but there is a mistake in font style in the plot. I need R= 0.87 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. It shouldn't be fixed manually

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

CodePudding user response:

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.

Plotly only solution

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
  • "paper" defines how x and y applies (relative to the axis (paper) or on specific value)
  • x = 0.1, y = 0.9 says that the text will be placed at the 10% of the x-axis and 90% of the y-axis.
  • text is the text itself. I am using basic functions to calculate R and p-value, and html symbols to edit the text.

Alternative using ggplotly

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
  • Related