Julia中的条形图:改变xticks的位置



我正试图在Julia中完成这项任务,但我很难做到。

如果我做以下

v = [6 12 17 21 28 25 19 15];
bar(v')

我要一张条形图。然而,我正在尝试将xticks与条形图的左边缘对齐,就像链接中所做的那样。我试着找,但找不到解决办法。我能得到一个提示吗?

可以使用xaxis将x个标签定位在所需位置,并使用xformatted选项格式化值:

bar(v', xaxis = ((0.5, 9), 0.5:1:8), bar_width=1, xformatter=v->Int(ceil(v)))

您使用的是哪个绘图库?Julia有很多好的选择,所以在提问时具体说明很重要。

假设您使用的是Plots.jl(可能是使用最广泛的包,与您在问题中显示的语法相匹配(,这实际上似乎是一个令人惊讶的复杂问题。下面还有一些(无益的(解释,但作为一种变通方法,我会做一些接近@attdonna建议的事情:你总是可以把你的x轴记号作为`(位置,值(的元组传递,所以

bar(v', xticks = ((1:length(v)).-0.4, 1:length(v)))

真的很管用。

---------------------------

现在来解释一下这里出了什么问题:从bar:的文档字符串来看,将条与边对齐理论上应该在Plots中起作用

help?> bar
bar(x,y)
bar!(x,y)
Make a bar plot of y vs x.
Arguments
≡≡≡≡≡≡≡≡≡≡≡
•  bar_position: Symbol. Choose from :overlay (default), :stack. (warning: May not be implemented fully)
•  bar_width: nothing or Number. Width of bars in data coordinates. When nothing, chooses based on x (or y when orientation = :h).
•  bar_edges: Bool. Align bars to edges (true), or centers (the default)?

所以bar_edges似乎是您要查找的关键字。遗憾的是,当尝试这个时,结果发现在执行bar(v', bar_edges = true)时没有任何变化。原因是它们的关键字实际上并没有为默认(GR(后端实现——因为Plots支持多个后端,所以并不是所有的关键字参数都可用于每个后端;你可以在这里查看哪些后台支持哪些关键字。

也就是说,在进行时

julia> using Plots; pyplot()
Plots.PyPlotBackend()
julia> bar(v', bar_edges = true)

什么都没有改变,所以这似乎出于某种原因不起作用。有趣的是,当传递长度错误的第一个参数(x轴位置(时,PyPlot声称支持传递边:

julia> bar([1 2], v')
ERROR: bar recipe: x must be same length as y (centers), or one more than y (edges).
length(x)=1, length(y)=8

但不幸的是,这似乎也不起作用:

julia> bar(1:9, v')
ERROR: Expects 9 elements in each col of y, found 8.

(事实上,相关文件说,允许边缘通过是一个待办事项,所以也许这应该是意料之中的事?(

简而言之,这是应该使用Plots.jl很容易做到的事情,但由于某种原因,它似乎已经从裂缝中掉了出来。

最新更新