创建具有多条线和色调的seaborn线型图

2024-06-28 10:50:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有多条测线的数据,我想创建seaborn测线图

每个迭代_值具有:

  • x_值-浮动列表
  • y_值-列出介于0和1之间的值
  • 行标题-一串色调

我有以下代码:

def save_graph(properties):
    plt.figure()
    for iteration_values in properties.iteration_values:
        sns_plot = sns.lineplot(iteration_values.x_values, iteration_values.y_values,
                                hue=iteration_values.line_title)

    plt.xlabel = properties.x_label
    plt.ylabel = properties.y_label

    plt.title(properties.title, fontsize=20)
    plt.ylim(0, 1)

    figure.savefig(file_path)

    plt.close()

iteration_values = [GraphIterationValues([1, 2, 3], [0.1, 0.2, 0.3], "first line title"),
                    GraphIterationValues(
                        [1, 2, 3], [0.2, 0.3, 0.4], "second line title"),
                    GraphIterationValues(
                        [1, 2, 3], [0.3, 0.4, 0.5], "third line title"),
                    GraphIterationValues([1, 2, 3], [0.4, 0.5, 0.6], "fourth line title")]

properties = OutputGraphPropertied(
    iteration_values, "x label", "y label", "plot title", "./output.jpeg")
save_graph(properties)

但我得到了一个错误:

ValueError: Could not interpret value `first line title` for parameter `hue`

这些是属性类:

class OutputGraphPropertied:
    def __init__(self, graph_iteration_values, x_label, y_label, title, file_path):
        self.graph_iteration_values = graph_iteration_values
        self.x_label = x_label
        self.y_label = y_label
        self.title = title
        self.file_path = file_path


class GraphIterationValues:
    def __init__(self, x_values, y_values, line_title):
        self.x_values = x_values
        self.y_values = y_values
        self.line_title = line_title

我试图让它看起来像这个月的情节(我用这张图片来说明): enter image description here


Tags: pathselftitlesavedeflinepltproperties
1条回答
网友
1楼 · 发布于 2024-06-28 10:50:05

要使hue正常工作,应立即提供所有数据。另外,hue应该引用与x和y长度相同的数组,因此对x和y值数组中的每个条目重复行标题

下面是对save_graph的前几行的可能改编:

import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np

def save_graph(properties):
    plt.figure()
    x_values = np.concatenate([iteration_values.x_values 
                               for iteration_values in properties.graph_iteration_values])
    y_values = np.concatenate([iteration_values.y_values
                               for iteration_values in properties.graph_iteration_values])
    line_titles = np.concatenate([[iteration_values.line_title] * len(iteration_values.x_values)
                                  for iteration_values in properties.graph_iteration_values])
    sns_plot = sns.lineplot(x=x_values, y=y_values, hue=line_titles)
    ...

resulting lineplot with hue per line

另一个选项是在同一图形上绘制多个绘图,不使用hue,而是设置label

def save_graph(properties):
    plt.figure()
    ax = None
    for iteration_values in properties.iteration_values:
        ax = sns.lineplot(x=iteration_values.x_values, y=iteration_values.y_values,
                                label=iteration_values.line_title, ax=ax)
    ...

这将循环当前颜色循环,并创建正确的图例

相关问题 更多 >