I'm creating a 3D scatterplot in plotly and want to have a title that is a few sentences long (in order to describe the figure), with the title left-justified, not interfering with the figure itself, and not being cut off by the plot area.
The code below incorporates a stackoverflow answer on left-justified titles in plotly, but it does not help when you have a long title that needs to go over 3-4 lines.
Using \n makes the title's text go to a second line, but it still gets cut off by the plot area and does not left-justify.
library(plotly)
metric1 <- c(116,230,120,200,210,188,130,99,101,120)
metric2 <- c(79,109,120,95,130,98,118,130,140,88)
metric3 <- c(30,28,42,22,6,2,17,43,20,28)
class <- c(3,4,2,1,1,4,4,3,2,3)
df <- data.frame(metric1,metric2,metric3,class)
my_colors=c("red", "blue", "green", "#000000")[df$class]
p <- plot_ly(df,
x = ~metric1,
y = ~metric2,
z = ~metric3, text = class, type = "scatter3d",
mode = "markers", marker = list(color = my_colors)) %>%
add_annotations(
x=0, y=1.15,
text="Figure: The title of the figure will explain what information can be gleaned from the figure. Then the next sentence, which is still in this title, will elaborate on implications from the results. I want to be able to extend this as needed.",
font=list(size=17)
) %>%
layout(title = FALSE,
scene = list(xaxis = list(title = 'metric 1', range = c(0,300)),
yaxis = list(title = 'metric 2', range = c(0,150)),
zaxis = list(title = 'metric 3', range = c(0,100))), showlegend = FALSE)
p
The output I get shows only the end of the title and cuts it off:
Thanks for any help.
I think with the help of align = "left"
and /n
will give you what you want:
metric1 <- c(116,230,120,200,210,188,130,99,101,120)
metric2 <- c(79,109,120,95,130,98,118,130,140,88)
metric3 <- c(30,28,42,22,6,2,17,43,20,28)
class <- c(3,4,2,1,1,4,4,3,2,3)
df <- data.frame(metric1,metric2,metric3,class)
my_colors=c("red", "blue", "green", "#000000")[df$class]
p <- plot_ly(df,
x = ~metric1,
y = ~metric2,
z = ~metric3, text = class, type = "scatter3d",
mode = "markers", marker = list(color = my_colors)) %>%
add_annotations(
x=0.4, y=0.9,
align = "left",
# text="Figure: The title of the figure will explain what information can be gleaned from the figure. Then the next sentence, which is still in this title, will elaborate on implications from the results. I want to be able to extend this as needed.",
text=paste("Figure: The title of the figure will explain what information can be gleaned from the figure", "Then the next sentence, which is still in this title", "I want to be able to extend this as needed.", sep="\n") ,
font=list(size=17)
) %>%
layout(title = FALSE,
scene = list(xaxis = list(title = 'metric 1', range = c(0,300)),
yaxis = list(title = 'metric 2', range = c(0,150)),
zaxis = list(title = 'metric 3', range = c(0,100))), showlegend = FALSE)
p