我正在尝试使用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)
)
答案 0 :(得分:1)
您应该使用Scale.x_continuous
的<{1}} 代替。log
。如果您看到the source,您可以看到这两者之间的唯一区别是转换功能。*
*:我会称之为翻译功能,但嘿,这只是我。
编辑:
所以上面并没有对间距这么做,这需要在exp
和using 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}}