我有一个非常具体的问题,涉及到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, 但在花了两个小时之后,我发现我无法解决这个问题).谢谢你的帮助。
A 我已经在我的评论中提到,简单的解决方案是使用一个有序的因子,即
df$SEC_LABEL <- factor(df$SEC_LABEL, levels = x_label)
和映射 SEC_LABEL
这样你就可以得到一个分类轴,其中的类别按照你想要的顺序排列。
然而,我在 plotly 文档中看了一下,使用了 schema()
. 根据plotly的规格 ticktext
设置在刻度位置显示的文字,通过
tickvals
. 只有在以下情况下才有效果tickmode
设置为 阵列. 使用时tickvals
.
因此,要想让你的方法奏效,你就必须要设置 tickmode
到 "array"
在 layout
并设置 tickvals
即 c(1, 2, 3)
在你的情况下。经过这些调整后,你的方法也会有效。