【发布时间】:2022-01-08 07:00:38
【问题描述】:
我正在使用 plot_ly 库在同一 x 轴上绘制 r 中的两种不同类型的数据。我有两个独立的 y 轴。这里的数据是一个快速模型,用于表示我正在使用的数据集。我有一系列解释变量(即实际值 1-10)、它们的系数以及它们在虚构模型中出现的归一化次数,以及填充向量以制作数据框的 NA 值:
require(tidyverse)
require(data.table)
require(stringr)
require(plotly)
require(processx)
Actuals <-c(1,2,3,4,5,6,7,8,9,10)
set.seed(10)
UniqCoef1 <- runif(10, min=-1, max=1)
NrmPolct1 <- c(.015,.005,.33,.32,.225,.025,.03,.05,NA ,NA)
dataframe1 <- data.frame(NrmPolct1,UniqCoef1,Actuals)
为了确定它们各自 y 和 y2 轴的范围,我根据系数的最大值构建了比例因子:
sclfctr1 <- ((.33*1.02)/.20)
然后绘制数据:
plot1 <- plot_ly(dataframe1) %>%
add_trace(x=~Actuals, y=~UniqCoef1, type="scatter", mode="markers", name="Coef Values") %>%
add_bars(x=~Actuals, y=~NrmPolct1, yaxis="y2", name="% Polcy Count") %>%
layout(plot_bgcolor='#D0CFC9',
yaxis=list(scaleanchor="x", scaleratio=5,title="Coefficients", zeroline = FALSE,
range=c((((max(UniqCoef1)*1.02)-(max(UniqCoef1)*1.02)+(min(UniqCoef1)*.98))/.80),max(UniqCoef1)*1.02),
tickvals=UniqCoef1,standoff=30),
yaxis2=list(scaleacnchor="y", scaleratio=.15,overlaying="y",side="right", tickvals=NrmPolct1,range=c(0,sclfctr1),title="% Polcy Count", standoff=30),
xaxis=list(tickvals=Actuals,title=paste("actuals"),showgrid=T, standoff=30),
title=paste0("# Actuals for State 23, Crop 41."))
我现在使用的方法通常可以防止散点图被条形遮挡,但我希望找到一种方法来限制 y1,使其仅利用绘图区域的前 80% 左右和 y2最底层的 20% 左右。
r 中的 plot_ly 可以吗?到目前为止,我对 scaleanchor 和 scaleratio 的使用以及布局部分中的 range() 参数均无效。
更新:我弄乱了 add_bars() 部分中的 base 参数,结果相同。
更新:域名也没有运气。可能我没有正确使用库中的工具,但我不确定还可以尝试什么。
21 年 2 月 2 日更新:测试新的范围计算。可能已经找到了一个偷工减料的方法。
【问题讨论】:
-
你看过
ggplotly吗?那里可能有一些选择 -
plotly 的主要问题是它严重缺乏可调性,尤其是像这样的东西
-
@neuron,我最初用 ggplot 尝试过这个,而 plot_ly 最终变得容易得多,所以我没有考虑 ggplotly。我会看看这个,看看我能找到什么。
-
好吧,在 ggplot 中使用辅助轴时,您实际上必须缩放数据,而不是轴。也许是同样的方法?
-
@JDA95
ggplotly似乎不起作用。我尝试使用ggplot绘制图并使用ggplotly并删除了第二个轴
标签: r r-plotly multiple-axes