gpt4 book ai didi

r - 在 Gadfly 中使用对数刻度调整刻度间距

转载 作者:行者123 更新时间:2023-12-04 11:07:01 25 4
gpt4 key购买 nike

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

Example plot
(来源:missouri.edu)

我有一些现有的 R 代码为此创建了一个空白基础,作为使用 matplot 和参数 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 并将参数移动到连续参数之后,但我无法从示例图中重新创建所需的 Axis 。

关于如何调整对数刻度 Axis 参数以创建上面的图,有什么建议吗?

为此使用不同的图形库会更容易吗?我选择 Gadfly 是因为我更熟悉 ggplot 语法,但我在谷歌搜索中不断遇到 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)
)

最佳答案

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

*:我会称它为翻译函数,但嘿,这就是我。

编辑:

所以上面的代码并没有完全解决间距问题,这需要在 logexp 之间进行更多的来回操作。以下内容应该可以帮助您作为骨架,但您必须使用参数来获得您想要的内容:

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))

enter image description here

关于r - 在 Gadfly 中使用对数刻度调整刻度间距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36961520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com