R Графический многолинейный график метка оси x - PullRequest
1 голос
/ 16 июня 2020

У меня очень конкретный c вопрос, который касается многострочных графиков в 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 не меняются с использованием значений в векторе 'x_label'. (Кстати, единственная причина, по которой я использую в качестве оси x столбец SORT вместо столбца SEC_LABEL, заключается в том, что в противном случае ось x сортируется в алфавитном порядке. В идеале желаемый порядок должен быть: 3M, 5Y, 10Y, но после потратив два часа, понял, что не могу это исправить). Спасибо за помощь

1 Ответ

1 голос
/ 16 июня 2020

AI, уже упомянутый в моем комментарии, простое решение - использовать упорядоченный коэффициент, то есть

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

и сопоставить SEC_LABEL на x. Таким образом, вы получите категориальную ось с категориями в желаемом порядке.

Тем не менее, я посмотрел в документации plotly, используя schema(). В соответствии со спецификациями plotly ticktext

Устанавливает текст, отображаемый в позиции галочки через tickvals. Имеет эффект, только если tickmode установлено как массив . Используется с tickvals.

Следовательно, чтобы ваш подход работал, вы должны установить tickmode на "array" в layout, а также установить tickvals, т.е. на c(1, 2, 3) в твоем случае. После этих корректировок ваш подход также будет работать.

...