如何在Dash Plotly中设置marginal_y边际图的格式?
Plotly Express散点图边际Y子图属性调整方案
问题场景
使用Plotly Express创建带边际Y小提琴子图的散点图,代码如下:
fig = px.scatter(df_filtrada, x=df_filtrada.index, y=pto, marginal_y = "violin")
设置主图背景透明后,边际子图背景同步变化,但无法移除边际轴网格,需要调整边际子图的show_grid、标题等属性。
解决方案
Plotly Express生成的边际子图会被分配独立的轴对象(如yaxis2对应边际Y轴),可以通过直接定位这些对象来修改属性:
1. 移除边际Y轴网格
边际Y轴对应布局中的yaxis2,可以用两种方式关闭网格:
# 方式1:通过update_layout直接修改yaxis2配置 fig.update_layout(yaxis2=dict(showgrid=False)) # 方式2:用update_yaxes指定secondary_y=True(边际轴属于次级Y轴) fig.update_yaxes(showgrid=False, secondary_y=True)
2. 调整边际子图的其他属性
- 修改边际子图标题:直接设置
yaxis2的title属性:
fig.update_layout(yaxis2=dict(title="数值分布小提琴图"))
- 单独设置边际子图背景色:如果需要和主图背景区分,可单独定义其背景透明度:
fig.update_layout( yaxis2=dict( plot_bgcolor="rgba(255,255,255,0)", paper_bgcolor="rgba(255,255,255,0)" ) )
- 调整小提琴图自身样式:边际子图的小提琴trace是独立的,可通过
update_traces加选择器定位修改:
# 修改小提琴图的线条颜色和宽度 fig.update_traces(line_color="#2ca02c", line_width=2, selector=dict(type="violin"))
完整示例代码
import plotly.express as px import pandas as pd # 模拟测试数据 df_filtrada = pd.DataFrame( {"pto": [2,5,3,7,4,6,3,8]}, index=pd.date_range("2024-01-01", periods=8) ) pto = "pto" # 创建散点图+边际Y小提琴图 fig = px.scatter(df_filtrada, x=df_filtrada.index, y=pto, marginal_y="violin") # 设置主图透明背景 fig.update_layout( plot_bgcolor="rgba(255,255,255,0)", paper_bgcolor="rgba(255,255,255,0)" ) # 移除边际Y轴网格 fig.update_yaxes(showgrid=False, secondary_y=True) # 设置边际子图标题 fig.update_layout(yaxis2=dict(title="数值分布")) # 调整小提琴图样式 fig.update_traces(line_color="#ff7f0e", selector=dict(type="violin")) fig.show()
内容的提问来源于stack exchange,提问作者Adrian Fischer
相关产品推荐
相关产品推荐

