如何在Plotly Express中强制显示每个子图的X轴与Y轴
让Plotly分面直方图的每个子图显示独立X/Y轴
使用plotly.express.histogram()绘制带行分面(facet_row)和列分面(facet_col)的直方图时,希望每个子图都显示独立的X轴与Y轴以提升可读性,但默认生成的图表中仅边缘子图显示轴,内部子图的轴被隐藏。测试代码如下:
import numpy as np import pandas as pd import plotly.express as px # create a dummy dataframe with lots of variables rng = np.random.default_rng(42) n_vars = 3 n_samples = 10 random_vars = [rng.normal(size=n_samples) for v in range(n_vars)] m = np.vstack(random_vars).T columns = pd.MultiIndex.from_tuples([('a','b'),('a','c'),('b','c')],names=['src','tgt']) df = pd.DataFrame(m,columns=columns) # convert to long format df_long = df.melt() # plot with plotly fig = px.histogram(df_long,x='value',facet_row='src',facet_col='tgt') fig.update_layout(yaxis={'side': 'left'}) fig.show()
解决方案
通过update_xaxes()和update_yaxes()统一配置所有分面子图的轴显示属性,即可让每个子图都显示X轴与Y轴:
import numpy as np import pandas as pd import plotly.express as px # 创建测试数据 rng = np.random.default_rng(42) n_vars = 3 n_samples = 10 random_vars = [rng.normal(size=n_samples) for v in range(n_vars)] m = np.vstack(random_vars).T columns = pd.MultiIndex.from_tuples([('a','b'),('a','c'),('b','c')],names=['src','tgt']) df = pd.DataFrame(m,columns=columns) # 转换为长格式 df_long = df.melt() # 绘制直方图 fig = px.histogram(df_long,x='value',facet_row='src',facet_col='tgt') fig.update_layout(yaxis={'side': 'left'}) # 配置所有子图显示X/Y轴 fig.update_xaxes(showticklabels=True, matches=None) fig.update_yaxes(showticklabels=True, matches=None) fig.show()
showticklabels=True:强制每个子图显示轴刻度标签与轴线matches=None:取消默认的轴共享机制,让每个子图的轴刻度范围可独立调整(若不需要独立范围,仅保留showticklabels=True即可)
内容的提问来源于stack exchange,提问作者Johannes Wiesner
相关产品推荐
相关产品推荐

