【问题标题】:Markers are not visible in seaborn plot标记在 seaborn 图中不可见
【发布时间】:2019-12-20 11:08:00
【问题描述】:

这是一个例子:

import seaborn as sns
ax = sns.lineplot(range(10), range(10), markers=True)

虽然我设置了markers=True,但为什么没有任何标记?

【问题讨论】:

    标签: python seaborn markers


    【解决方案1】:

    基本上,因为这不是 markers= 的用途。作为per the documentation

    标记:布尔值、列表或字典,可选

    对象确定 如何为样式变量的不同级别绘制标记。 设置为 True 将使用默认标记,或者您可以传递一个列表 样式变量的标记或字典映射级别到 标记。设置为 False 将绘制无标记线。标记是 在 matplotlib 中指定。

    因此,markers= 仅在您还指定了 style= 参数时才有用。例如:

    fmri = sns.load_dataset("fmri")
    ax = sns.lineplot(x="timepoint", y="signal", style="event", data=fmri, markers=True)
    

    但是,其他 kwarg 被传递给 plt.plot(),因此,您可以通过使用 marker= kwarg 来指示 lineplot 使用标记(注意缺少“s”):

    ax = sns.lineplot(range(10), range(10), marker='o')
    

    【讨论】:

    • 我不想使用数据框来指定要可视化的数据,但是,我只想将列表传递为 xy 值。我认为直观的是,如果没有data 传递,当markers=True 时应该只使用默认标记类型,如果没有data,则给定样式不是有效参数。
    • 明白,但正如 ImportanceOfBeingErnest 在他的其他评论中所说,seaborn 只是一个帮助绘制数据框的助手。如果您不需要这些功能,则没有理由使用它,您应该直接使用 matplotlib 绘图
    【解决方案2】:

    发现了一个类似的问题here。例如,如果您使用 marker='*' 指定 matplotlib 参数,则会显示标记。

    【讨论】:

    • 这不是错误。它只是不应该以这种方式使用。 (链接答案下方的评论是关于传说的,这是错误的。)
    • 我认为预期的用法根本不直观(请参阅我在其他回复中的评论)。
    • 这就是为什么在@BenT 链接的答案中,我收集了您通常拥有的选项。如果您不想使用 seaborn 假定的数据结构,则根本没有理由使用 seaborn。
    猜你喜欢
    • 2022-01-12
    • 1970-01-01
    • 2014-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-03
    • 1970-01-01
    相关资源
    最近更新 更多