具有R绘图注释的林区列

问题描述

代码中的拼写错误已得到修复,因此现在应该可以重现

我刚开始在StackOverflow上发帖,所以如果我的问题或示例不够清楚,请告诉我,我将根据需要添加更多信息。

我正在尝试使用Rplotly中开发一个森林图。为此,我需要能够将文本沿y轴放置,就好像它是带格式的表格一样(对于文本,列内容应左对齐,对于数字see here for an example,应右对齐)。 我最初的解决方案是在每个y轴刻度上使用一个长的格式化字符串(使用打印格式)。这有效,但仅适用于等宽字体。

所以现在我尝试使用注释而不是y轴标签。困难在于将每个注释/列正确放置在绘图区域之外以创建所需的格式。 我首先想在列中找到最宽的字符串并据此计算归一化的坐标,但是我对此没有经验,因此尽管我可以使注释显示为左对齐的列,但是我的转换是错误的,并且之间的空格是列很大。这是我过去尝试找出坐标的方法。如果您可以为此指出其他功能,或者知道如何使用这些坐标,那么这绝对是我的首选解决方案。请注意,要在图的左/右绘制的列数将由用户动态选择,因此图的边距也需要能够进行调整。而且我认为这些必须以像素为单位,所以这带来了另一种转换,从标准化坐标到像素...

  longestMpg = max(strwidth(mtcars$mpg,unit = 'in'))
  coord = grconvertX(longestMpg,from = 'inches',to = 'ndc') #normalized device coordinates
  # coord = grconvertX(longestNames,to = 'npc') # normalized plot coordinates
  # coord = grconvertX(longestNames,to = 'nfc') # normalized figure coordinates

因此,现在我继续将每个列/注释放在x = 0上的单独图中,并尝试在最后将它们组合成一个子图(这不是一种非常优雅的解决方法...)。这里的问题是,文本在每个图上分别显示为左对齐(此时我不尝试混合左对齐和右对齐的文本),但是一旦将两个图放入一个子图,该文本在第二个图中居中对齐。这是一个非常简单的示例:

library(plotly)

# Plot only mtcar$disp
aPlot = plotly_empty(mtcars,type = "scatter",mode = "markers") %>%
  config(
    displayModeBar = FALSE
  )

for (i in 1:nrow(mtcars)) {
  aPlot = aPlot %>% add_annotations(x = 0,y = i,text = mtcars$disp[i],xref = 'paper',yref = 'y',showarrow = F) %>%
    layout(yxaxis = list(showline = T),yaxis = list(showline = T))

}

# Plot only mtcar rownames
bPlot = plotly_empty(mtcars,mode = "markers") %>%
  config(
    displayModeBar = FALSE
  )
for (i in 1:nrow(mtcars)) {
  bPlot = bPlot %>% add_annotations(x = 0,text = rownames(mtcars)[i],yaxis = list(showline = T))

}

# subplot
subplot(aPlot,bPlot,shareX = T,shareY = F)

也许有一种更轻松,更优雅的方式来实现我想要的东西,并且我很高兴学习新知识,所以请不要犹豫,分享您的想法。 感谢您的帮助!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)