gpt4 book ai didi

python - plotly :如何从具有长格式或宽格式的 Pandas 数据框中绘制线图?

转载 作者:行者123 更新时间:2023-12-03 15:21:13 38 4
gpt4 key购买 nike

(这是一篇自我回答的文章,通过帮助其他人不必解释plotly如何最好地处理长格式和宽格式的数据,从而缩短了对plotly问题的回答)

我想在尽可能少的行中基于 Pandas 数据框构建一个可绘制的图形。我知道您可以使用plotly.express做到这一点,但是对于我所谓的标准pandas数据框来说,这失败了。描述行顺序的索引,描述数据帧中值名称的列名称:

样本数据框:

    a           b           c
0 100.000000 100.000000 100.000000
1 98.493705 99.421400 101.651437
2 96.067026 98.992487 102.917373
3 95.200286 98.313601 102.822664
4 96.691675 97.674699 102.378682

尝试:
fig=px.line(x=df.index, y = df.columns)

这引发了一个错误:

ValueError: All arguments should have the same length. The length of argument y is 3, whereas the length of previous arguments ['x'] is 100`

最佳答案

在这里,您尝试使用宽格式的pandas数据框作为px.line的源。plotly.express设计为与long format数据帧一起使用,通常被称为tidy data(请看一看。没有人比Wickham更好地解释了这一点)。许多人,尤其是那些因使用Excel多年的战斗而受伤的人,经常发现更容易组织各种格式的数据。那有什么区别呢?
宽幅格式:

  • 数据与每个不同的数据变量一起显示在单独的列
  • 每列只有一种数据类型
  • 缺失值通常由np.nan
  • 表示
  • plotly.graphobjects(go)
  • 一起使用效果最佳
  • 线通常使用fid.add_traces()
  • 添加到图形中
  • 颜色通常分配给每个迹线

  • 示例:
                a          b           c
    0 -1.085631 0.997345 0.282978
    1 -2.591925 0.418745 1.934415
    2 -5.018605 -0.010167 3.200351
    3 -5.885345 -0.689054 3.105642
    4 -4.393955 -1.327956 2.661660
    5 -4.828307 0.877975 4.848446
    6 -3.824253 1.264161 5.585815
    7 -2.333521 0.328327 6.761644
    8 -3.587401 -0.309424 7.668749
    9 -5.016082 -0.449493 6.806994
    长格式:

    呈现
  • 数据,其中一列包含所有值,另一列列出值
  • 的上下文
  • 缺失值根本不包括在数据集中。
  • plotly.express(px)
  • 一起使用效果最佳
  • 颜色由默认颜色周期设置,并分配给每个唯一变量

  • 示例:
        id  variable    value
    0 0 a -1.085631
    1 1 a -2.591925
    2 2 a -5.018605
    3 3 a -5.885345
    4 4 a -4.393955
    ... ... ... ...
    295 95 c -4.259035
    296 96 c -5.333802
    297 97 c -6.211415
    298 98 c -4.335615
    299 99 c -3.515854
    怎么去 from wide to long
    df = pd.melt(df, id_vars='id', value_vars=df.columns[:-1])
    下面的两个片段将产生相同的 plotly :
    enter image description here
    如何使用px绘制长数据?
    fig = px.line(df, x='id', y='value', color='variable')
    如何使用go绘制广泛的数据?
    colors = px.colors.qualitative.Plotly
    fig = go.Figure()
    fig.add_traces(go.Scatter(x=df['id'], y = df['a'], mode = 'lines', line=dict(color=colors[0])))
    fig.add_traces(go.Scatter(x=df['id'], y = df['b'], mode = 'lines', line=dict(color=colors[1])))
    fig.add_traces(go.Scatter(x=df['id'], y = df['c'], mode = 'lines', line=dict(color=colors[2])))
    fig.show()
    从外观上看, go更复杂,并且可能提供更多的灵活性?嗯,是。和不。您可以使用 px轻松构建图并添加您想要的任何 go对象!
    完整的摘录片段:
    import numpy as np
    import pandas as pd
    import plotly.express as px
    import plotly.graph_objects as go

    # dataframe of a wide format
    np.random.seed(123)
    X = np.random.randn(100,3)
    df=pd.DataFrame(X, columns=['a','b','c'])
    df=df.cumsum()
    df['id']=df.index

    # plotly.graph_objects
    colors = px.colors.qualitative.Plotly
    fig = go.Figure()
    fig.add_traces(go.Scatter(x=df['id'], y = df['a'], mode = 'lines', line=dict(color=colors[0])))
    fig.add_traces(go.Scatter(x=df['id'], y = df['b'], mode = 'lines', line=dict(color=colors[1])))
    fig.add_traces(go.Scatter(x=df['id'], y = df['c'], mode = 'lines', line=dict(color=colors[2])))
    fig.show()
    完整的px片段:
    import numpy as np
    import pandas as pd
    import plotly.express as px
    from plotly.offline import iplot

    # dataframe of a wide format
    np.random.seed(123)
    X = np.random.randn(100,3)
    df=pd.DataFrame(X, columns=['a','b','c'])
    df=df.cumsum()
    df['id']=df.index

    # dataframe of a long format
    df = pd.melt(df, id_vars='id', value_vars=df.columns[:-1])

    # plotly express
    fig = px.line(df, x='id', y='value', color='variable')
    fig.show()

    关于python - plotly :如何从具有长格式或宽格式的 Pandas 数据框中绘制线图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62012194/

    38 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com