R Plotly多线图x轴标签

问题描述 投票:0回答:1

我有一个非常具体的问题,涉及到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轴上的ticks没有使用向量'x_label'中的值重新标记(顺便说一下,我使用SORT列而不是SEC_LABEL列作为x轴的唯一原因是,否则x轴会按字母顺序排序。理想情况下,所需的排序应该是 3M, 5Y, 10Y, 但在花了两个小时之后,我发现我无法解决这个问题).谢谢你的帮助。

r plotly r-plotly
1个回答
1
投票

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

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

和映射 SEC_LABEL 这样你就可以得到一个分类轴,其中的类别按照你想要的顺序排列。

然而,我在 plotly 文档中看了一下,使用了 schema(). 根据plotly的规格 ticktext

设置在刻度位置显示的文字,通过 tickvals. 只有在以下情况下才有效果 tickmode 设置为 阵列. 使用时 tickvals.

因此,要想让你的方法奏效,你就必须要设置 tickmode"array"layout 并设置 tickvalsc(1, 2, 3) 在你的情况下。经过这些调整后,你的方法也会有效。

© www.soinside.com 2019 - 2024. All rights reserved.