使用NVD3在R的rCharts中绘制对数比例尺

3
我正在使用rCharts在R中创建一个交互式散点图。以下代码完全正常:
library(rCharts)
test.df <- data.frame(x=sample(1:100,size=30,replace=T),
                      y=sample(10:1000,size=30,replace=T), 
                      g=rep(c('a','b'),each=15))
n1 <- nPlot(y ~ x, group="g", data=test.df, type='scatterChart')
n1

我需要的是在X和Y轴上都使用对数刻度。我该如何在rCharts中指定而不需要修改生成的html/javascript?
更新1: 以下是我试图使用rCharts绘制的更现实和静态版本的图表:
set.seed(2935)
y_nbinom <- c(rnbinom(n=20, size=10, mu=90), rnbinom(n=20, size=20, mu=1282), rnbinom(n=20, size=30, mu=12575))
x_nbinom <- c(rnbinom(n=20, size=30, mu=100), rnbinom(n=20, size=40, mu=1000), rnbinom(n=20, size=50, mu=10000))
x_fixed <- c(rep(100,20), rep(1000,20), rep(10000,20))
realp <- rep(0:2, each=2) * 20 + sample(1:20, size=6, replace=F)
tdf <- data.frame(y = c(y_nbinom,y_nbinom,y_nbinom[realp]), x=c(x_fixed,x_nbinom,x_nbinom[realp]), type=c(rep(c('fixed','nbinom'),each=60), rep('real',6)))
with(tdf, plot(x, y, col=type, pch=19, log='xy'))

你只是想绘制 log(x) vs. log(y) 吗?最简单的方法是直接转换数据。 - Ramnath
1
@Ramnath 感谢回复。我将把这个解决方案作为最后的选择。我更喜欢在转换的轴上使用非转换的值——我想利用这个图形的交互能力来通过打开和关闭它们来引起注意组之间的差异;同时,观众直接看到非转换的值会比在听时计算指数更容易。 - dojuba
你能提供一个静态图以便我理解你想要什么吗? - Ramnath
@Ramnath 我添加了图的静态版本,现在看起来非常类似于我最终想要在rCharts / slidify中制作的演示文稿。保持数据不变换的原因只是为了观众...我认为在rCharts / NVD3中使用对数刻度应该很简单,但由于“放大”控件的缘故,可能并不是这样。 - dojuba
1个回答

2

我认为这个问题有点旧了,但我遇到了类似的问题,并使用此帖子中的信息解决了它: rCharts nvd3库强制刻度

这是我针对基于10的对数尺度堆叠面积图的解决方案,散点图应该不会有太大区别。

df<-data.frame(x=rep(10^seq(0,5,length.out=24),each=4),
           y=round(runif(4*24,1,50)),
           var=rep(LETTERS[1:4], 4))
df$x<-log(df$x,10)

p <- nPlot(y ~ x, group = 'var', data = df,
         type = 'stackedAreaChart', id = 'chart')

p$xAxis(tickFormat = "#!function (x) {    
tickformat = [1,10,100,1000,10000,'100k'];
return tickformat[x];}!#")

p

感谢您抽出时间回答这个老问题。虽然不像我希望的那样直接(需要两个步骤:记录数据,重新标记坐标轴刻度),但绝对能完成任务! - dojuba
我发现了一种稍微更好(更通用)的方法来完成这个:p $ xAxis(tickFormat =“#!function(x){ return Math.round(100*Math.pow(10,x))/100; }!#”)您可以将10替换为任何基数。 100是为了避免数字超过两位小数。 - Jon Nagra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接