【问题标题】:R Plotly multi line plot x axis labelR Plotly多线图x轴标签
【发布时间】:2020-10-06 05:34:21
【问题描述】:

我有一个与 R 中的多线绘图相关的非常具体的问题。我发现了许多与条形图相关的问题,但与我目前的情况没有任何关系。 我有以下简化的数据框和代码:

df <- data.frame(SEC_LABEL = c("3M","5Y",'10Y'), SEC1_VALUES = c(1.1, 1.4, 1.6), SEC2_VALUES = c(2.3, 2.6, 3.1), SORT=c(1,2,3))
color_line1 <- "#66C2A5"  #('rgb(102, 194, 165)')
  color_line2 <- "#8DA0CB" #('rgb(110, 194, 165)')

unique_line_names_1 <- "line1"
unique_line_names_2 <- "line2"

x_label < - as.character(df$SEC_LABEL)

p <- plot_ly(data = df, x = ~SORT) %>%
      # Time series chart
      add_lines(y = ~SEC1_VALUES, line = list(color = color_line1, width = 3),
                hoverinfo = unique_line_names_1, text = unique_line_names_1, name = unique_line_names_1)  %>%

      add_lines(y = ~SEC2_VALUES, line = list(color = color_line2, width = 3),
                hoverinfo = unique_line_names_2, text = unique_line_names_2, name = unique_line_names_2) %>%

      layout(title=paste0("Curves"),
             showlegend = TRUE,
             margin = list(l=30, r = 20, b = 30, t = 30, pad =1),
             legend = list(x = 0, y = 0.1, 
                           font = list(size = 8),
                           #orientation = 'h',
                           bgcolor ='transparent' ),
             xaxis=list(title='',
                        showline = FALSE,
                        zeroline = FALSE,
                        showticklabels = T,
                        showgrid = FALSE,
                        ticktext = x_label, 
                        gridwidth =0
                        #gridcolor = toRGB("gray50")
                        ),
             yaxis=list(title='',
                        showline = F,
                        zeroline = FALSE,
                        showgrid = T,
                        gridwidth =2)
             )

由于某些原因,未使用向量“x_label”中的值重新标记 x 轴上的刻度。 (顺便说一下,我使用 SORT 列而不是 SEC_LABEL 列作为 x 轴的唯一原因是,否则 x 轴会按字母顺序排序。理想情况下,所需的顺序应该是:3M、5Y、10Y,但在花了两个小时,我意识到我无法修复它)。 感谢您的帮助

【问题讨论】:

  • 只需将SEC_LABEL 转换为有序因子,即df$SEC_LABEL &lt;- factor(df$SEC_LABEL, levels = x_label) 并将其映射到x。工作正常。
  • @stefan 非常感谢你!!!!!!这绝对是完美的
  • 我的荣幸。但现在我想知道为什么你的方法没有奏效。嗯。需要考虑的事情。 (;
  • @stefan 你的意思是它可能是一个错误吗?
  • 嗨@Angelo。看了一下规格。所以。不,这不是错误。有时 plotly 不像 ggplot2 那样简单或直观。作为答案,它有点冗长,我将其发布为答案。最佳 S.

标签: r plotly r-plotly


【解决方案1】:

我在评论中已经提到,简单的解决方案是使用有序因子,即

df$SEC_LABEL <- factor(df$SEC_LABEL, levels = x_label)

并在 x 上映射 SEC_LABEL。通过这种方式,您可以获得一个分类轴,其中包含所需顺序的类别。

但是,我使用 schema() 查看了 plotly 文档。根据plotly ticktext的规范

通过tickvals 设置在刻度位置显示的文本。只拥有 如果 tickmode 设置为 array,则效果。与tickvals 一起使用。

因此,要让您的工作方法生效,您必须将layout 中的tickmode 设置为"array",并在您的情况下设置tickvals,即c(1, 2, 3)。在这些调整之后,您的方法也将起作用。

【讨论】:

  • 惊人的解释斯特凡。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多