如何在Plotly中为柱状图的特定柱子之间添加空白间隔
Plotly 柱状图指定位置添加空白间隔实现方法
有两种常用的实现方案,操作都比较简单:
方案一:插入空类别占位(逻辑最简单,兼容性最强)
核心思路是在x轴类别的对应位置插入一个空值类别,该类别对应的y值设为0,绘图时会自动在该位置留出空白,之后隐藏该位置的x轴标签即可。
示例代码如下:import plotly.express as px import pandas as pd # 原始业务数据示例,可替换为你自己的数据集 raw_data = pd.DataFrame({ "x轴类别": [1,2,3,4,5,6,7,8,9,10,"All"], "数值": [2,3,5,4,6,7,3,5,8,9,13] }) # 在10和All之间插入空类别 new_x = [1,2,3,4,5,6,7,8,9,10,"","All"] new_y = [2,3,5,4,6,7,3,5,8,9,0,13] processed_data = pd.DataFrame({"x轴类别": new_x, "数值": new_y}) # 绘图时指定x轴顺序避免乱序 fig = px.bar(processed_data, x="x轴类别", y="数值", category_orders={"x轴类别": new_x}) # 隐藏空类别的x轴标签 fig.update_xaxes( ticktext = [str(item) if item != "" else "" for item in new_x], tickvals = new_x ) fig.show()方案二:拆分轨迹自定义偏移(无需修改原始数据集,间隔大小可自由控制)
核心思路是把「All」柱子单独作为一个条形轨迹,自定义它的x轴位置,和前面的1-10类别的柱子之间留出空隙,之后调整x轴刻度显示即可。
示例代码如下:import plotly.graph_objects as go import pandas as pd raw_data = pd.DataFrame({ "x轴类别": [1,2,3,4,5,6,7,8,9,10,"All"], "数值": [2,3,5,4,6,7,3,5,8,9,13] }) # 拆分普通类别和All类别 normal_df = raw_data[raw_data["x轴类别"] != "All"] all_df = raw_data[raw_data["x轴类别"] == "All"] fig = go.Figure() # 添加普通类别的条形轨迹,宽度设为0.4 fig.add_trace(go.Bar( x = normal_df["x轴类别"], y = normal_df["数值"], width = 0.4, name = "分组数值" )) # 添加All类别的条形轨迹,x轴位置设为10.8,和前一个柱子之间留出0.4的空隙 fig.add_trace(go.Bar( x = [10.8], y = all_df["数值"], width = 0.4, name = "All", customdata = ["All"], hovertemplate = "类别: All<br>数值: %{y}<extra></extra>" )) # 调整x轴刻度显示,对齐All的位置 fig.update_xaxes( ticktext = [str(i) for i in range(1,11)] + ["All"], tickvals = list(range(1,11)) + [10.8] ) fig.show()
内容的提问来源于stack exchange,提问作者N.Woodruff
相关产品推荐
相关产品推荐

