用绘图表示覆盖两个直方图

时间:2019-09-18 08:44:17

标签: plotly plotly-express

我想重叠两个直方图,目前我仅使用以下简单代码显示一个直方图。这两个数据帧的长度不相同,但是重叠它们的直方图值仍然有意义。

let col=Array.prototype.slice.call( document.querySelectorAll( 'td > input[type="submit"]' ) );
    col.forEach( input =>{
        input.addEventListener('click',function(event){
            alert( 'Value: '+this.value );
        });
    });

使用纯密谋,这是从the documentation复制的方式:

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()

我只是想知道剧情表达是否有任何特别惯用的方式。希望这也可以体现出绘图和绘图表达之间的完整性和不同层次的抽象。

2 个答案:

答案 0 :(得分:2)

您可以找到px结构并使用它来创建图。我希望使用表达的“颜色”选项显示堆叠的直方图,但是很难以纯绘图方式重新创建。

给出一个以utctimestamp作为时间索引,严重性和类别作为要在直方图中计数的东西的数据帧(df),我用它来获取堆叠的直方图:

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; dr px.histogram创建一个直方图对象列表,您可以将其抓取为列表并通过go.Figure呈现。

我无法内联发布,但是这里是来自像素https://imgur.com/a/l7BblZo的堆积直方图

答案 1 :(得分:1)

诀窍是通过将数据合并到一个整齐的数据框中来制作单个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")

收益:

enter image description here