首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将标签传递到Plots.jl直方图

将标签传递到Plots.jl直方图
EN

Stack Overflow用户
提问于 2020-11-03 08:54:39
回答 1查看 766关注 0票数 1

我对朱莉娅很陌生,我想知道如何将标签传递给Plots.jl包中的直方图函数。

代码语言:javascript
复制
using Plots
gr()
histogram(
    data[:sentiment_labels],
    title = "Hstogram of sentiment labels",
    xlabel = "Sentiment",
    ylabel = "count",
    label = ["Negative" "Positive" "Neutral"],
    fillcolor = [:coral,:dodgerblue,:slategray]
)

只有第一个标签“否定”出现在情节中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-03 10:54:03

所以简单的回答是:你的地块里只有一个标签,因为你的图里只有一个数据系列--一个直方图只画了一个数据系列,它有一个标签附在上面。似乎有些不寻常的是,您得到了多种颜色,但只有一个图例,所以我将详细说明为什么会发生这种情况,因为它对Plots.jl用户很有教育意义,而且经常引起混淆,我相信:

这是一个有点巧合,你得到了三种不同的颜色,为你正在绘制的酒吧。这里发生的情况是,您提供了一个color参数,该参数是为柱状图中的条形图循环通过的。如果您为您的histogram调用提供更多的颜色,您可以看到这一点:

代码语言:javascript
复制
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之间有回收箱,只是在这些箱子里没有观察)。因此,每五个条形都有相同的颜色,随着零条的消失,我们在情节中只能看到一个颜色。

另一种看法是拥有比你的情感标签更连续的数据:

代码语言:javascript
复制
cont_data = rand(1_000)

histogram(
    cont_data,
    fillcolor = [:coral, :red, :green, :dodgerblue, :slategray]
)

给予:

实际上,这里只传递了一个颜色参数。histogram调用中颜色和标签之间的关键区别是,一行是行,另一个是列向量:

代码语言:javascript
复制
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中,这是一个非常微妙的区别,它经常让人们感到震惊(包括我!)

因此,要获得三个标签,您应该有三个系列,为其绘制直方图。这样做的一种方法是将情绪标签的向量分成三个向量:

代码语言:javascript
复制
histogram(
    [filter(x -> x == y, sentiment_labels) for y ∈ -1:1],
    fillcolor = [:coral :dodgerblue :slategray],
    label = ["Negative" "Positive" "Neutral"]
)

给予:

虽然我可能会争辩说,在您的情况下,histogram不是正确的工具--如果您的标签只会是负的、中性的和正的,那么简单的条形图就可以了,因为您不需要直方图提供的自动绑定功能。所以我可能会这么做:

代码语言:javascript
复制
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
)

得到:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64659547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档