情节:如何显示边际直方图计数以外的其他值?
Plotly: How to show other values than counts for marginal histogram?
我正在尝试在原始图上方创建一个链接的边缘图,具有相同的 x 轴但具有不同的 y 轴。
我看到在 plotly.express
包中有 4 个选项,您可以在其中创建 marginal_x 散点图图,但它们都基于与 x 和 y 相同的列.
在我的例子中,我的 x 轴上有一个日期,而我的 y 轴上有某物的速率,我正在尝试生成该速率所基于的样本的直方图边际分布图(位于 df 内的示例列中)。
我在不减少任何重要细节的情况下简化了我尝试过的内容:
import pandas as pd
import plotly.express as px
df = pd.DataFrame(
{
"date": [pd.Timestamp("20200102"), pd.Timestamp("20200103")],
"rate": [0.88, 0.96],
"samples": [130, 1200])
}
)
fig = px.scatter(df, x='date', y='rate', marginal_x='histogram')
fig.show()
我基于的文档:https://plotly.com/python/marginal-plots/
我想要的结果:
Example:
不同的是我使用了一个聚合的df,所以我的计数只是1,而不是样本的数量。
有什么想法吗?
谢谢!
我理解你的说法
[...] and rate of something on my y-axis
... 表示您想在直方图上显示一个 不 计数的值。
px.scatter()
中的 marginal_x='histogram'
似乎默认显示计数 仅 ,这意味着没有直接的方法来显示单个观察值.但是,如果您愿意将 fig = make_subplots()
与 go.Scatter()
和 go.Bar()
结合使用,那么您可以轻松构建:
情节
完整代码:
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
from plotly.subplots import make_subplots
import plotly.graph_objects as go
fig = make_subplots(rows=2, cols=1,
row_heights=[0.2, 0.8],
vertical_spacing = 0.02,
shared_yaxes=False,
shared_xaxes=True)
df = pd.DataFrame(
{
"date": [pd.Timestamp("20200102"), pd.Timestamp("20200103")],
"rate": [0.88, 0.96],
"samples": [130, 1200]
}
)
fig.add_trace(go.Bar(x=df['date'], y=df['rate'], name = 'rate'), row = 1, col = 1)
fig.update_layout(bargap=0,
bargroupgap = 0,
)
fig.add_trace(go.Scatter(x=df['date'], y=df['samples'], name = 'samples'), row = 2, col = 1)
fig.update_traces(marker_color = 'rgba(0,0,250, 0.3)',
marker_line_width = 0,
selector=dict(type="bar"))
fig.show()
您可以就地编辑边缘的直方图轨迹。
import plotly
import pandas as pd
import plotly.express as px
def plotly_histograms_to_percent(fig):
""" Modify marginal histograms from count to percent
Args:
fig(plotly.figure): plotly figure
return plotly.figure
"""
for trace in fig.data:
if type(trace) == plotly.graph_objs._histogram.Histogram:
trace.histfunc = 'sum'
trace.histnorm = 'percent'
trace.hovertemplate = trace.hovertemplate.replace('<br>count=%', '<br>percent=%')
return fig
df = pd.DataFrame({
"date": [pd.Timestamp("20200102"), pd.Timestamp("20200102"), pd.Timestamp("20200103")],
"rate": [0.89,0.88, 0.96],
"samples": [130,131, 1200]
})
fig = px.scatter(df, x='date', y='rate', marginal_x='histogram', marginal_y='histogram')
fig = plotly_histograms_to_percent(fig)
fig.show()
我正在尝试在原始图上方创建一个链接的边缘图,具有相同的 x 轴但具有不同的 y 轴。
我看到在 plotly.express
包中有 4 个选项,您可以在其中创建 marginal_x 散点图图,但它们都基于与 x 和 y 相同的列.
在我的例子中,我的 x 轴上有一个日期,而我的 y 轴上有某物的速率,我正在尝试生成该速率所基于的样本的直方图边际分布图(位于 df 内的示例列中)。
我在不减少任何重要细节的情况下简化了我尝试过的内容:
import pandas as pd
import plotly.express as px
df = pd.DataFrame(
{
"date": [pd.Timestamp("20200102"), pd.Timestamp("20200103")],
"rate": [0.88, 0.96],
"samples": [130, 1200])
}
)
fig = px.scatter(df, x='date', y='rate', marginal_x='histogram')
fig.show()
我基于的文档:https://plotly.com/python/marginal-plots/
我想要的结果: Example:
不同的是我使用了一个聚合的df,所以我的计数只是1,而不是样本的数量。
有什么想法吗?
谢谢!
我理解你的说法
[...] and rate of something on my y-axis
... 表示您想在直方图上显示一个 不 计数的值。
px.scatter()
中的 marginal_x='histogram'
似乎默认显示计数 仅 ,这意味着没有直接的方法来显示单个观察值.但是,如果您愿意将 fig = make_subplots()
与 go.Scatter()
和 go.Bar()
结合使用,那么您可以轻松构建:
情节
完整代码:
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
from plotly.subplots import make_subplots
import plotly.graph_objects as go
fig = make_subplots(rows=2, cols=1,
row_heights=[0.2, 0.8],
vertical_spacing = 0.02,
shared_yaxes=False,
shared_xaxes=True)
df = pd.DataFrame(
{
"date": [pd.Timestamp("20200102"), pd.Timestamp("20200103")],
"rate": [0.88, 0.96],
"samples": [130, 1200]
}
)
fig.add_trace(go.Bar(x=df['date'], y=df['rate'], name = 'rate'), row = 1, col = 1)
fig.update_layout(bargap=0,
bargroupgap = 0,
)
fig.add_trace(go.Scatter(x=df['date'], y=df['samples'], name = 'samples'), row = 2, col = 1)
fig.update_traces(marker_color = 'rgba(0,0,250, 0.3)',
marker_line_width = 0,
selector=dict(type="bar"))
fig.show()
您可以就地编辑边缘的直方图轨迹。
import plotly
import pandas as pd
import plotly.express as px
def plotly_histograms_to_percent(fig):
""" Modify marginal histograms from count to percent
Args:
fig(plotly.figure): plotly figure
return plotly.figure
"""
for trace in fig.data:
if type(trace) == plotly.graph_objs._histogram.Histogram:
trace.histfunc = 'sum'
trace.histnorm = 'percent'
trace.hovertemplate = trace.hovertemplate.replace('<br>count=%', '<br>percent=%')
return fig
df = pd.DataFrame({
"date": [pd.Timestamp("20200102"), pd.Timestamp("20200102"), pd.Timestamp("20200103")],
"rate": [0.89,0.88, 0.96],
"samples": [130,131, 1200]
})
fig = px.scatter(df, x='date', y='rate', marginal_x='histogram', marginal_y='histogram')
fig = plotly_histograms_to_percent(fig)
fig.show()