如何使图表标题跨多行并在绘图中左对齐?

时间:2019-01-30 18:41:15

标签: r plotly scatter-plot r-plotly scatter3d

我正在以绘图方式创建3D散点图,希望标题长几句话(以描述图形),标题左对齐,不干扰图形本身,并且不会被情节区域割断。

下面的代码在图上左对齐的标题中包含了一个stackoverflow答案,但是当您的长标题需要超过3-4行时,它无济于事。

使用\ n可使标题的文本移至第二行,但仍会被绘图区域截断并且不会左对齐。

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

我得到的输出仅显示标题的结尾并将其剪掉:

enter image description here

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我认为在align = "left"/n的帮助下,您会得到想要的东西:

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