能否在Plotly Express的scatter_polar中使用facet_col或facet_row参数
plotly.express.scatter_polar分面功能问题解答
报错原因
Plotly Express 目前所有极坐标类绘图接口(包括scatter_polar、bar_polar等)均不支持原生facet_col/facet_row分面参数,这类参数仅对笛卡尔坐标系的px绘图接口生效,因此你传入facet_col参数时会触发「未预期的关键字参数」报错。
自动适配分类数量的分面实现方案
无需手动适配Site取值数量,可通过遍历分类值+自动生成极坐标子图的方式实现效果,代码示例如下:
import plotly.express as px import plotly.subplots as sp import pandas as pd # 原始数据 df=pd.DataFrame({'WD': {0: 'N', 1: 'N', 2: 'N', 3: 'N', 4: 'N', 5: 'N', 6: 'NNE', 7: 'NNE', 8: 'NNE', 9: 'NNE', 10: 'NNE', 11: 'NNE'}, 'WS': {0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 1, 7: 2, 8: 3, 9: 4, 10: 5, 11: 6}, 'Lines': {0: 0, 1: 3, 2: 5, 3: 12, 4: 1, 5: 0, 6: 0, 7: 1, 8: 4, 9: 5, 10: 2, 11: 0}, 'Site': {0: 'EQ21301', 1: 'EQ21309', 2: 'EQ21301', 3: 'EQ21306', 4: 'EQ21301', 5: 'EQ21301', 6: 'EQ21301', 7: 'EQ21301', 8: 'EQ21306', 9: 'EQ21306', 10: 'EQ21306', 11: 'EQ21309'}}) # 获取Site唯一值,自动确定子图数量 site_list = df['Site'].unique() site_count = len(site_list) # 自动创建对应数量的极坐标子图 fig = sp.make_subplots( rows=1, cols=site_count, subplot_titles=site_list, specs=[[{"type": "polar"} for _ in range(site_count)]] ) # 遍历每个Site生成对应子图 for idx, site in enumerate(site_list, 1): site_df = df[df['Site'] == site] # 生成单张极坐标散点图 temp_fig = px.scatter_polar( site_df, r="WS", theta="WD", size='Lines', color='WS', color_discrete_sequence=px.colors.sequential.YlOrRd ) # 将轨迹添加到对应子图位置 fig.add_trace(temp_fig.data[0], row=1, col=idx) # 统一调整全局样式 fig.update_layout(template='plotly_dark', showlegend=False) fig.show()
以上代码会自动识别Site字段的取值数量,生成对应数量的极坐标分面子图,无需针对分类数量修改代码逻辑,可完全达到原生分面参数的使用效果。
内容的提问来源于stack exchange,提问作者WillH
相关产品推荐
相关产品推荐

