我对朱莉娅很陌生,我想知道如何将标签传递给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]
)只有第一个标签“否定”出现在情节中。

发布于 2020-11-03 10:54:03
所以简单的回答是:你的地块里只有一个标签,因为你的图里只有一个数据系列--一个直方图只画了一个数据系列,它有一个标签附在上面。似乎有些不寻常的是,您得到了多种颜色,但只有一个图例,所以我将详细说明为什么会发生这种情况,因为它对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
)得到:

https://stackoverflow.com/questions/64659547
复制相似问题