繁体   English   中英

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

[英]Annotation / Text for ticklabels in R plotly polar chart

假设我有一个简单的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)

图表绘制 在此处输入图片说明

当我将showticklabels = FALSE设置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吗?

预期地块

在此处输入图片说明

您可以使用showgrid = FALSE完全删除angularaxis所有网格线,或者可以从0开始每22.5度有一条线,然后ticktext将类似于以下c('', 'A', '', 'B', '', 'C', .......) ,或者您可以乏味地添加期望的行,然后删除网格线,如下所示:

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") (从A倒序)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM