R绘图极坐标图中的刻度标签的注释/文本

时间:2019-04-15 09:10:13

标签: r ggplot2 r-plotly polar-coordinates

比方说,我有一个简单的polar chart

R代码

library(plotly)

p <- plot_ly(
  type = 'scatterpolar',
  r = c(0,1,2,4),
  theta = c(0,45,90,120),
  size = c(10, 20, 30, 40),
  sizes = c(100, 300),
  mode = 'markers'
) %>%
  layout(
    showlegend = FALSE,
    polar = list(
      angularaxis = list(
        showticklabels = TRUE#,
        #tickmode="array",
        #tickvals = c(22.5, 67.5, 112, 157.5, 202, 247.5, 292, 337.5),
        #ticktext = c('A', "B", "C", "D", "E", "F", "G", "H")
    ),
      radialaxis = list(
        tickmode="array",
        tickvals = c(0, 1, 2, 3, 4, 5, 6, 7),
        ticktext = c('', "One", "Two", "Three", "Four", "Five", "Six", "Seven")
      )
  )
  )
ggplotly(p)

绘制图表enter image description here

设置showticklabels = FALSE时,角度刻度标签消失,然后我想将A,B,C,D,E,F,G and H放置在角度c(22.5, 67.5, 112, 157.5, 202, 247.5, 292, 337.5)上。

我无法使用ticktextstickvals得到下面的预期图。 有人可以帮我解决问题,还是可以使用add_textadd_annotation吗?

预期地积

enter image description here

1 个答案:

答案 0 :(得分:1)

您可以使用angularaxis删除showgrid = FALSE中的所有网格线,也可以每22.5度有一条从0开始的网格线,然后ticktext就像这样{ {1}},也可以繁琐地添加期望的行,然后删除网格线,如下所示:

c('', 'A', '', 'B', '', 'C', .......)

输出图表

enter image description here

我注意到,您在那里的预期输出会在您的代码中以相反的方式列出字母。如果这也是您需要的,只需更改字母的顺序以匹配这样的角度p <- plot_ly() %>% # data points add_trace(type = 'scatterpolar', r = c(0,1,2,4), theta = c(0,45,90,120), size = c(10, 20, 30, 40), sizes = c(100, 300), mode = 'markers') %>% # straight line from 0 dg to 180 dg add_trace(type = 'scatterpolar', r = c(0,4.3,4.3), theta = c(0, 180, 360), mode = 'lines', line = list(color = 'grey', width = 1)) %>% # straight line from 45 dg to 225 dg add_trace(type = 'scatterpolar', r = c(0,4.3,4.3), theta = c(0, 45, 225), mode = 'lines', line = list(color = 'grey', width = 1)) %>% # straight line from 90 dg to 270 dg add_trace(type = 'scatterpolar', r = c(0,4.3,4.3), theta = c(0, 90, 270), mode = 'lines', line = list(color = 'grey', width = 1)) %>% # straight line from 135 dg to 315 dg add_trace(type = 'scatterpolar', r = c(0,4.3,4.3), theta = c(0, 135, 315), mode = 'lines', line = list(color = 'grey', width = 1)) %>% # fill circle of radius 1 add_trace(type = 'scatterpolar', mode = 'lines', r = 1, theta =seq(0, 360, 0.1), line = list(color = 'grey'), fill = 'toself', fillcolor = 'grey', opacity = 0.5) %>% layout( showlegend = FALSE, polar = list( angularaxis = list( showticklabels = TRUE, # remove grid lines and ticks showgrid = FALSE, ticks = '', # if you want the axis to go the other way around # direction = 'clockwise', tickmode="array", tickvals = seq(22.5, 337.5, 45), ticktext = LETTERS[1:8] ), radialaxis = list( tickmode="array", tickvals = c(0, 1, 2, 3, 4, 5, 6, 7), ticktext = c('', "One", "Two", "Three", "Four", "Five", "Six", "Seven") ) ) ) ggplotly(p) (从c("A", "H", "G", "F", "E", "D", "C", "B")开始的相反顺序)