我有以下图表,其中图例遮盖了部分数据:
using Plots; gr()
using StatPlots
groupedbar(rand(1:100,(10,10)),bar_position=:stack, label="item".*map(string,collect(1:10)))
Run Code Online (Sandbox Code Playgroud)
我可以看到,使用“ legend”属性,可以将图例移动到绘图区域内的各个位置,例如:
groupedbar(rand(1:100,(10,10)),bar_position=:stack, label="item".*map(string,collect(1:10)),legend=:bottomright)
Run Code Online (Sandbox Code Playgroud)
有什么方法可以将图例完全移至绘图区域之外,例如移至绘图的右侧或下方吗?对于这些堆积的条形图,在图区内部确实没有图例的好位置。到目前为止,我唯一能想到的解决方案是在输入数据矩阵中创建一些“虚假”的空行,以使空间中带有一些零,但这似乎有点棘手,并且需要进行一些摆弄才能获得正确的结果。每次绘制时的额外行数:
groupedbar(vcat(rand(1:100,(10,10)),zeros(3,10)),bar_position=:stack, label="item".*map(string,collect(1:10)),legend=:bottomright)
Run Code Online (Sandbox Code Playgroud)
我可以看到,有人针对pyplot提出了某种解决方案,有人知道GR后端有类似的解决方案吗?我可以想象的另一个解决方案-是否可以将图例本身保存到其他文件中,然后再将它们重新放在Inkscape中?
Ale*_*lec 21
现在可以通过Plots.jl轻松启用:
例子:
plot(rand(10), legend = :outertopleft)
Run Code Online (Sandbox Code Playgroud)
使用布局,我可以创建一个变通方法,制作仅带有图例的假图。
using Plots
gr()
l = @layout [a{0.001h}; b c{0.13w}]
values = rand(1:100,(10,10))
p1 = groupedbar(values,bar_position=:stack, legend=:none)
p2 = groupedbar(values,bar_position=:stack, label="item".*map(string,collect(1:10)), grid=false, xlims=(20,3), showaxis=false)
p0=plot(title="Title",grid=false, showaxis=false)
plot(p0,p1,p2,layout=l)
Run Code Online (Sandbox Code Playgroud)