15

我有以下情节,其中部分数据被图例遮盖了:

using Plots; gr()
using StatPlots
groupedbar(rand(1:100,(10,10)),bar_position=:stack, label="item".*map(string,collect(1:10)))

堆积条形图

我可以看到使用“legend”属性,可以将图例移动到绘图区域内的各个位置,例如:

groupedbar(rand(1:100,(10,10)),bar_position=:stack, label="item".*map(string,collect(1:10)),legend=:bottomright)

右下角带有图例的堆积条形图

有没有办法将绘图图例完全移到绘图区域之外,例如绘图的右侧或下方?对于这种堆积条形图,在情节区域内真的没有好地方放图例。到目前为止,我能想出的唯一解决方案是在输入数据矩阵中制作一些“假”的空行,以腾出一些零的空间,但这似乎有点笨拙,需要一些摆弄才能得到正确的每次绘图时的额外行数:

groupedbar(vcat(rand(1:100,(10,10)),zeros(3,10)),bar_position=:stack, label="item".*map(string,collect(1:10)),legend=:bottomright)

带有图例的堆叠条形图放置在额外的空白处

我可以看到,有人为 pyplot 提出了某种解决方案,有人知道 GR 后端的类似解决方案吗?我可以想象的另一个解决方案 - 有没有办法将图例本身保存到不同的文件中,以便我可以将它们重新组合到 Inkscape 中?

4

2 回答 2

25

现在可以使用Plots.jl轻松启用:

例子:

plot(rand(10), legend = :outertopleft)

在此处输入图像描述

于 2019-11-06T20:35:10.330 回答
8

使用布局,我可以创建一个解决方法,只制作带有图例的假图。

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)

在此处输入图像描述

于 2018-06-01T13:35:01.570 回答