【问题标题】:plotly express: multiple data-series in same column -> plot in one figureplotly express:同一列中的多个数据系列->在一个图中绘制
【发布时间】:2021-10-26 17:41:06
【问题描述】:

我有一个包含连续 y 值的表

name_a val1 
name_a val2
name_b val3 
name_b val4 

我想在散点图或折线图中按顺序绘制 y 值,并将系列“name1”与系列“name2”进行比较。

听起来很简单,但不知何故我无法解决它。 这是我到目前为止所尝试的

import pandas as pd
import plotly.express as px

# prepare data
df = pd.read_csv(filename_results, delimiter=',', header=None)
df_subset_a = df.loc[df[1] == 'name_a']
df_subset_b = df.loc[df[1] == 'name_b']

values_a = df_subset_a.loc[:,1];
values_b = df_subset_b.loc[:,1];

fig = px.scatter(y=values_a); 

现在如何将第二个系列“values_b”添加到同一个图中

【问题讨论】:

  • 所提供的建议对您有何帮助?

标签: python pandas plotly


【解决方案1】:

我在这里观察到fig = px.scatter(y=values_a); 语句中没有x=values。我试图用非常简单的数据创建一个虚拟图。

import plotly.graph_objects as go
from plotly.subplots import make_subplots
from plotly.offline import iplot

X = list(range(10))
Y = list(range(10,20))

trace1 = go.Scatter(
            x=X[:5],
            y=Y[:5],
            name='plot1',

            )
trace2 = go.Scatter(
            x=X[5:],
            y=Y[5:],
            name='plot2',


                  )

fig = make_subplots(specs=[[{"secondary_y": True}]])
fig.add_trace(trace1)
fig.add_trace(trace2,secondary_y=True)
fig['layout'].update(height = 600, width = 800, title = 'graph', xaxis=dict(
  tickangle=-45
))
iplot(fig)

输出:

【讨论】:

    【解决方案2】:
    • 不清楚您要达到的目标
    • 已经模拟了一个符合您描述的数据框
    • 您的绘图未指定 x,因此它将位于通过 y 的数组中的位置。假设您实际上并不想要这个,因此将其定义为熊猫系列索引
    • 那么就是add_traces()第二系列trace的简单案例
    import pandas as pd
    import numpy as np
    import plotly.express as px
    
    # prepare data
    # df = pd.read_csv(filename_results, delimiter=',', header=None)
    df = pd.DataFrame({0:np.random.uniform(1,5,200), 1:np.random.choice(["name_a","name_b"], 200)})
    df_subset_a = df.loc[df[1] == 'name_a']
    df_subset_b = df.loc[df[1] == 'name_b']
    
    values_a = df_subset_a.loc[:,1];
    values_b = df_subset_b.loc[:,1];
    
    px.scatter(y=values_a, x=values_a.index).add_traces(px.scatter(y=values_b, x=values_b.index).data)
    
    

    【讨论】:

      【解决方案3】:

      我怀疑您正在查看长格式的标准数据帧,并且没有指定索引。如果我是正确的,那么我们只是在谈论一个非常典型的use-case for approaches such as px.line()。在这种情况下,如果我们将字符串val1替换为实际值,下面的sn-p会产生下图:

      情节

      代码

      import plotly.express as px
      import pandas as pd
      
      df = pd.DataFrame({'index': [1,2,1,2],
                         'name':['a', 'a', 'b', 'b'],
                         'value':[1,2,3,4]})
      
      fig = px.line(df, y ='value', x = 'index', color = 'name')
      fig.show()
                              
      

      【讨论】:

        猜你喜欢
        • 2021-01-26
        • 2022-12-14
        • 2020-12-14
        • 2022-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-15
        • 1970-01-01
        相关资源
        最近更新 更多