两个水平子图中的两个密度热图

two Density Heatmaps in two horizontal subplots

我可以使用 2D Histograms or Density Heatmaps.

绘制 DataFrame 的一列
flights = pd.read_csv('Flights dataset.csv')

fig = px.density_heatmap(flights_dest, x='DEST_CITY_NAME', marginal_x="histogram")
fig.show()

我想在包含两个水平子图的图中使用密度热图绘制来自两个不同数据帧的两列。

Subplots in Python,我看到我应该使用plotly.graph_objects库来实现子图:

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

fig = make_subplots(rows=2, cols=1)

fig.add_trace(
    go.Scatter(x=[1, 2, 3], y=[4, 5, 6]),
    row=1, col=1
)

fig.add_trace(
    go.Scatter(x=[20, 30, 40], y=[50, 60, 70]),
    row=1, col=2
)

fig.update_layout(height=600, width=800, title_text="Side By Side Subplots")
fig.show()

但我找不到 Density Heatmaps 的等效项,它是在 plotly.graph_objects 库中使用 plotly.express 创建的。

知道如何实施吗?

这是一个方法。

  • 使用 Plotly Express
  • 从数据框中创建您想要的图形
  • 通过添加在上一步
  • 中创建的轨迹将它们整合到子图中
  • 修复布局。 直方图 不可见,热图 每个轨迹的颜色条

尝试的替代方案:

  • 整合数据帧 pd.concat() 然后使用 Plotly Expressrow_facet。这不会产生任何直方图,只是热图
from plotly.subplots import make_subplots
import plotly.graph_objects as go
import plotly.express as px
import pandas as pd
import numpy as np

df = px.data.tips()
df2 = pd.DataFrame(
    {"total": np.random.uniform(15, 25, 100), "var": np.random.uniform(1, 5, 100)}
)
fig = make_subplots(rows=4, cols=1)

# build plots to be integrated into sub-plots
figs = [
    px.density_heatmap(df2, x="total", y="var", marginal_x="histogram"),
    px.density_heatmap(df, x="total_bill", y="tip", marginal_x="histogram"),
]

# integrated into sub-plots
for fn, f in enumerate(figs):
    for tn, t in enumerate(f.data[::-1]):
        if fn>0 and isinstance(t, go.Histogram2d):
            t = t.update(coloraxis=f"coloraxis{tn+1}")
        fig.add_trace(t, row=(fn * 2) + (tn + 1), col=1)

fig.update_layout(xaxis_visible=False, xaxis3_visible=False)
fig.update_layout(height=500, coloraxis_colorbar_x=.95)
fig.update_xaxes(domain=[0,.94])