Julia 将标签传递到Plots.jl直方图
我是Julia的新手,想知道如何将标签传递到Plots.jl包中的直方图函数Julia 将标签传递到Plots.jl直方图,julia,plots.jl,Julia,Plots.jl,我是Julia的新手,想知道如何将标签传递到Plots.jl包中的直方图函数 using Plots gr() histogram( data[:sentiment_labels], title = "Hstogram of sentiment labels", xlabel = "Sentiment", ylabel = "count", label = ["Negative"
using Plots
gr()
histogram(
data[:sentiment_labels],
title = "Hstogram of sentiment labels",
xlabel = "Sentiment",
ylabel = "count",
label = ["Negative" "Positive" "Neutral"],
fillcolor = [:coral,:dodgerblue,:slategray]
)
只有第一个标签“负”出现在绘图中
所以简单的回答是:在你的图中只有一个标签,因为在你的图中只有一个数据系列-直方图只绘制一个数据系列,其中有一个标签附着在它上面。这可能看起来有点不寻常,你得到了多种颜色,但只有一个图例,所以我将解释为什么会发生这种情况,因为这很有启发性,而且是情节混乱的一个常见来源。jl用户我相信: 这是一个有点巧合,你得到三种不同的颜色为酒吧你正在绘制。这里发生的事情是,您提供了一个单独的
color
参数,该参数在柱状图中的条形图中循环使用。如果为直方图提供更多颜色,您可以看到这一点
using Plots
sentiment_labels = [fill(-1, 200); fill(0, 700); fill(1, 100)]
histogram(
sentiment_labels,
fillcolor = [:coral, :red, :green, :dodgerblue, :slategray]
)
给出:
这里发生了什么事?我们提供了五种颜色,结果表明,直方图每五个增量只有一个条形图(在-1、0和1之间有一个箱子,只是这些箱子中没有观察值)。因此,每五个条都有相同的颜色,零条消失后,我们在绘图中只能看到一种颜色
另一种方式是拥有比情绪标签更连续的数据:
cont_data = rand(1_000)
histogram(
cont_data,
fillcolor = [:coral, :red, :green, :dodgerblue, :slategray]
)
给出:
实际上这里只传递了一个颜色参数。直方图调用中颜色和标签之间的关键区别在于一个是行,另一个是列向量:
julia> ["Negative" "Neutral" "Positive"]
1×3 Array{String,2}:
"Negative" "Neutral" "Positive"
julia> [:coral, :slategrey, :dodgerblue]
3-element Array{Symbol,1}:
:coral
:slategrey
:dodgerblue
Plots将第一个解释为适用于三个不同的系列(“负”是第一个系列的标签,“中性”是第二个系列,“正”是第三个系列),而第二个解释为仅适用于一个系列(因此,:coral
,:slategrey
,:dodgerblue
都是第一个系列的颜色。这在Plots.jl中是一个相当微妙的区别,它经常让人绊倒(包括我!)
因此,要获得三个标签,您应该有三个系列来绘制直方图。一种方法是将情绪标签向量拆分为三个向量:
histogram(
[filter(x -> x == y, sentiment_labels) for y ∈ -1:1],
fillcolor = [:coral :dodgerblue :slategray],
label = ["Negative" "Positive" "Neutral"]
)
给出:
虽然我可能会争辩说,在您的情况下,直方图
不是正确的工具-如果您的标签只会是负的、中性的和正的,一个简单的条形图就可以了,因为您不需要直方图提供的自动装箱功能。因此我可能会这样做:
bar(
title = "Count of sentiment labels",
xlabel = "Sentiment",
ylabel = "count",
[-1 0 1], [[sum(sentiment_labels .== x)] for x ∈ -1:1],
label = ["Negative" "Positive" "Neutral"],
fillcolor = [:coral :dodgerblue :slategray],
linecolor = [:coral :dodgerblue :slategray],
xticks = -1:1
)
要获得: