【问题标题】:two Density Heatmaps in two horizontal subplots两个水平子图中的两个密度热图
【发布时间】:2021-12-17 00:16:42
【问题描述】:

我可以使用 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()

我想在包含两个水平子图的图中使用密度热图从两个不同的 DataFrame 中绘制两列。

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

但我在 plotly.graph_objects 库中找不到使用 plotly.express 创建的 Density Heatmaps 的等价物。

知道如何实现它吗?

【问题讨论】:

  • 我不明白二维直方图和密度热图是否相同,但我可以通过在子图中指定 go.Histgram2d() 来绘制具有不同数据的图形。彩条需要控制。
  • @r-beginners in density_heatmap 我可以添加marginal_x="histogram"。但是,在Histgram2d() 中,它不支持。
  • 直方图和热图有多重要?我可以为热图找到解决方案
  • @RobRaymond 这不是必须的,但我更喜欢拥有它

标签: python dataframe plotly heatmap plotly-python


【解决方案1】:

这是一种方法。

  • 使用 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])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-19
    • 1970-01-01
    • 2014-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多