9

我想使用下面的简单代码覆盖两个直方图,我目前只在另一个旁边显示一个。这两个数据帧的长度不同,但覆盖它们的直方图值仍然有意义。

import plotly.express as px

fig1 = px.histogram(test_lengths, x='len', histnorm='probability', nbins=10)
fig2 = px.histogram(train_lengths, x='len', histnorm='probability', nbins=10)
fig1.show()
fig2.show()

纯情节,这是从文档中复制的方式:

import plotly.graph_objects as go

import numpy as np

x0 = np.random.randn(500)
# Add 1 to shift the mean of the Gaussian distribution
x1 = np.random.randn(500) + 1

fig = go.Figure()
fig.add_trace(go.Histogram(x=x0))
fig.add_trace(go.Histogram(x=x1))

# Overlay both histograms
fig.update_layout(barmode='overlay')
# Reduce opacity to see both histograms
fig.update_traces(opacity=0.75)
fig.show()

我只是想知道情节表达是否有任何特别惯用的方式。希望这也有助于说明情节和情节表达之间的完整性和不同抽象级别。

4

3 回答 3

12

诀窍是通过将数据组合成一个整洁的数据框来制作单个 Plotly Express 图形,而不是制作两个图形并尝试将它们组合起来(目前这是不可能的):

import numpy as np
import pandas as pd
import plotly.express as px

x0 = np.random.randn(250)
# Add 1 to shift the mean of the Gaussian distribution
x1 = np.random.randn(500) + 1

df =pd.DataFrame(dict(
    series=np.concatenate((["a"]*len(x0), ["b"]*len(x1))), 
    data  =np.concatenate((x0,x1))
))

px.histogram(df, x="data", color="series", barmode="overlay")

产量:

在此处输入图像描述

于 2019-09-18T18:33:39.723 回答
2

您可以获取 px 结构并使用它来创建图形。我希望使用“颜色”选项来显示堆叠直方图,该选项是表达但难以以纯情节重新创建的。

给定一个数据帧 (df),其中 utctimestamp 作为时间索引、严重性和类别作为直方图中要计算的内容,我使用它来获得堆叠直方图:

figure_data=[]
figure_data.extend([i for i in px.histogram(df, x="utctimestamp", color="severity", histfunc="count").to_dict()['data']])
figure_data.extend([i for i in px.histogram(df, x="utctimestamp", color="category", histfunc="count").to_dict()['data']])
fig=go.Figure(figure_data)
fig.update_layout(barmode='stack')
fig.update_traces(overwrite=True, marker={"opacity": 0.7}) 
fig.show()

tl;drpx.histogram创建一个直方图对象列表,您可以将其作为列表抓取并通过go.Figure.

我不能内联发布,但这里是来自 px https://imgur.com/a/l7BblZo的堆叠直方图

于 2020-06-19T20:07:38.850 回答
1

如果希望使用 plotly 的graph_objects模块,则可以使用barmode="overlay"如下所示的 2 个直方图。

import plotly.graph_objects as go
fig = go.Figure(data=[go.Histogram(x=x)])
fig.add_trace(go.Histogram(x=x,))
fig.update_layout(barmode='overlay')

于 2022-01-14T17:45:21.667 回答