在Gadfly

时间:2016-04-30 23:53:30

标签: r julia axis gadfly

我正在尝试使用Gadfly在Julia中创建以下情节:

Example plot http://oak.snr.missouri.edu/silviculture/tools/density.png

我有一些现有的R代码为此创建一个空白基础作为更大的绘图功能的一部分,使用matplot和parm log =' xy'这会产生正确间隔的刻度。

...matplot(tpa, qmd, ylab = "Quadratic Mean Diameter", 
xlab = "Trees per acre", type = "n",
log = "xy", xlim = c(1,1200),
ylim = c(1, 40),main ="")...

我目前拥有的Julia代码是

Using Gadfly
plot(x=[1],y=[1],
Scale.x_log, Scale.y_log,
Scale.x_continuous(minvalue=1,maxvalue=1200),
Scale.y_continuous(minvalue=1,maxvalue=40),
Guide.xticks(ticks=[1,5,10,50,100,500,1000]),
Guide.YTicks(ticks=[1,2,5,10,20]),
Guide.XLabel("Trees per acre"), Guide.YLabel("Quadratic Mean Diameter"),
Theme(grid_color=colorant"black"),
Geom.point)

以正确的值创建刻度线,但间距关闭,导致较低的值相互压缩。我尝试修改Scale.x_log并将参数移动到连续参数之后,但我无法从示例图中重新创建所需的轴。

关于如何调整对数刻度轴参数以创建上图的任何建议?

使用不同的图形库会更容易吗? 我选择Gadfly,因为我对ggplot语法感觉更舒服,但我在google搜索中不断遇到plots()和Pyplot()包。

编辑/工作代码:

我得到了它的工作,关键点是传递所需断点的日志。非常感谢Felipe的lambda函数,我不熟悉它们是如何工作的。

myxticks=log([1,5,10,50,100,500,1000])
myyticks=log([1,2,5,10,20])

plot(x=[1], y=[1],
Geom.point,
Scale.x_log(labels=d-> @sprintf("%d",e^d)),
Scale.y_log(labels=d-> @sprintf("%d",e^d)),
Guide.xticks(ticks=myxticks),
Guide.yticks(ticks=myyticks)
) 

1 个答案:

答案 0 :(得分:1)

您应该使用Scale.x_continuous的<{1}} 代替log。如果您看到the source,您可以看到这两者之间的唯一区别是转换功能。*

*:我会称之为翻译功能,但嘿,这只是我。

编辑:

所以上面并没有对间距这么做,这需要在expusing Gadfly pts=collect(1:20) theticks=collect(log(linspace(1,20,10))) plot(x=pts, y=pts, Geom.point, Scale.x_log(labels=d-> @sprintf("%d",e^d)), Guide.xticks(ticks=theticks)) 之间多做一些来回。以下内容可以帮助您作为一个骨架,尽管您必须使用参数来获得您想要的内容:

{{1}}

enter image description here