将标签传递给 Plots.jl 直方图
Passing labels to Plots.jl histogram
我是 Julia 的新手,想知道如何将标签传递给 Plots.jl 包中的直方图函数。
using Plots
gr()
histogram(
data[:sentiment_labels],
title = "Hstogram of sentiment labels",
xlabel = "Sentiment",
ylabel = "count",
label = ["Negative" "Positive" "Neutral"],
fillcolor = [:coral,:dodgerblue,:slategray]
)
图中只有第一个标签“负”出现。
所以简短的回答是:你的图中只有一个标签,因为你的图中只有一个数据系列 - 直方图只绘制一个数据系列,它附有一个标签。你得到多种颜色但只有一个图例似乎有点不寻常,所以我将分解为什么会发生这种情况,因为它具有指导意义,并且我相信 Plots.jl 用户经常感到困惑:
您为正在绘制的条形获得了三种不同的颜色,这有点巧合。这里发生的是您提供了一个单一的 color
参数,该参数在直方图中的条形图上循环。如果您为 histogram
调用提供更多颜色,您可以看到这一点:
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]
)
给出:
所以实际上这里只传递了一个颜色参数。 histogram
调用中颜色和标签之间的关键区别在于,一个是行向量,另一个是列向量:
julia> ["Negative" "Neutral" "Positive"]
1×3 Array{String,2}:
"Negative" "Neutral" "Positive"
julia> [:coral, :slategrey, :dodgerblue]
3-element Array{Symbol,1}:
:coral
:slategrey
:dodgerblue
图会将第一个解释为适用于三个不同的系列(“负面”是第一个系列的标签,“中性”是第二个,“积极”是第三个),而它解释第二个因为仅适用于一个系列(所以 :coral
、:slategrey
、:dodgerblue
都是传入的第一个系列的所有颜色。这是 Plots.jl 中的一个非常微妙的区别,通常绊倒人(包括我!)
要获得三个标签,您应该绘制直方图的三个系列。一种方法是将你的情感标签向量分成三个向量:
histogram(
[filter(x -> x == y, sentiment_labels) for y ∈ -1:1],
fillcolor = [:coral :dodgerblue :slategray],
label = ["Negative" "Positive" "Neutral"]
)
给出:
尽管我可能会争辩说,在您的情况下,histogram
不是正确的工具 - 如果您的标签只会是负面的、中性的和正面的,那么一个简单的条形图就可以了,因为您不需要直方图提供的自动分箱功能。所以我可能会这样做:
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
)
得到:
我是 Julia 的新手,想知道如何将标签传递给 Plots.jl 包中的直方图函数。
using Plots
gr()
histogram(
data[:sentiment_labels],
title = "Hstogram of sentiment labels",
xlabel = "Sentiment",
ylabel = "count",
label = ["Negative" "Positive" "Neutral"],
fillcolor = [:coral,:dodgerblue,:slategray]
)
图中只有第一个标签“负”出现。
所以简短的回答是:你的图中只有一个标签,因为你的图中只有一个数据系列 - 直方图只绘制一个数据系列,它附有一个标签。你得到多种颜色但只有一个图例似乎有点不寻常,所以我将分解为什么会发生这种情况,因为它具有指导意义,并且我相信 Plots.jl 用户经常感到困惑:
您为正在绘制的条形获得了三种不同的颜色,这有点巧合。这里发生的是您提供了一个单一的 color
参数,该参数在直方图中的条形图上循环。如果您为 histogram
调用提供更多颜色,您可以看到这一点:
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]
)
给出:
所以实际上这里只传递了一个颜色参数。 histogram
调用中颜色和标签之间的关键区别在于,一个是行向量,另一个是列向量:
julia> ["Negative" "Neutral" "Positive"]
1×3 Array{String,2}:
"Negative" "Neutral" "Positive"
julia> [:coral, :slategrey, :dodgerblue]
3-element Array{Symbol,1}:
:coral
:slategrey
:dodgerblue
图会将第一个解释为适用于三个不同的系列(“负面”是第一个系列的标签,“中性”是第二个,“积极”是第三个),而它解释第二个因为仅适用于一个系列(所以 :coral
、:slategrey
、:dodgerblue
都是传入的第一个系列的所有颜色。这是 Plots.jl 中的一个非常微妙的区别,通常绊倒人(包括我!)
要获得三个标签,您应该绘制直方图的三个系列。一种方法是将你的情感标签向量分成三个向量:
histogram(
[filter(x -> x == y, sentiment_labels) for y ∈ -1:1],
fillcolor = [:coral :dodgerblue :slategray],
label = ["Negative" "Positive" "Neutral"]
)
给出:
尽管我可能会争辩说,在您的情况下,histogram
不是正确的工具 - 如果您的标签只会是负面的、中性的和正面的,那么一个简单的条形图就可以了,因为您不需要直方图提供的自动分箱功能。所以我可能会这样做:
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
)
得到: