如何在Plotly图表中仅替换X轴显示标签而保留原有数据与图表形态
如何在Plotly图表中仅替换X轴显示标签而保留原有数据与图表形态
嘿,我完全懂你的需求啦——你想保留基于month列的图表数据和整体形态,但把X轴上显示的标签换成label_object里的内容,完全不改动底层的图表结构,对吧?这事儿其实超简单,咱们只需要在Plotly的布局配置里做个刻度标签的映射就行,不用碰原始的x数据源~
核心解决方案
咱们的思路是:
- 继续用
month作为X轴的底层数据源(保证图表的形态和数据100%不变) - 在
update_layout的xaxis设置中,通过tickvals和ticktext两个参数,把原始刻度值和新的显示标签做一一对应:tickvals:指定原始的X轴刻度值(也就是你的month列表)ticktext:对应要显示的新标签内容(也就是label_object列表)
修改后的完整代码
import plotly.graph_objects as go # Add data month = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] label_object = ['Obj-1', 'Obj-2', 'Obj-3', 'Obj-4', 'Obj-5', 'Obj-6', 'Obj-7', 'Obj-8', 'Obj-9', 'Obj-10', 'Obj-11', 'Obj-12'] high_2000 = [32.5, 37.6, 49.9, 53.0, 69.1, 75.4, 76.5, 76.6, 70.7, 60.6, 45.1, 29.3] low_2000 = [13.8, 22.3, 32.5, 37.2, 49.9, 56.1, 57.7, 58.3, 51.2, 42.8, 31.6, 15.9] high_2007 = [36.5, 26.6, 43.6, 52.3, 71.5, 81.4, 80.5, 82.2, 76.0, 67.3, 46.1, 35.0] low_2007 = [23.6, 14.0, 27.0, 36.8, 47.6, 57.7, 58.9, 61.2, 53.3, 48.5, 31.0, 23.6] high_2014 = [28.8, 28.5, 37.0, 56.8, 69.7, 79.7, 78.5, 77.8, 74.1, 62.6, 45.3, 39.9] low_2014 = [12.7, 14.3, 18.6, 35.5, 49.9, 58.0, 60.0, 58.6, 51.7, 45.2, 32.2, 29.1] fig = go.Figure() # Create and style traces(这部分完全没改动,保留原始数据) fig.add_trace(go.Scatter(x=month, y=high_2014, name='High 2014', line=dict(color='firebrick', width=4))) fig.add_trace(go.Scatter(x=month, y=low_2014, name = 'Low 2014', line=dict(color='royalblue', width=4))) fig.add_trace(go.Scatter(x=month, y=high_2007, name='High 2007', line=dict(color='firebrick', width=4, dash='dash') # dash options include 'dash', 'dot', and 'dashdot' )) fig.add_trace(go.Scatter(x=month, y=low_2007, name='Low 2007', line = dict(color='royalblue', width=4, dash='dash'))) fig.add_trace(go.Scatter(x=month, y=high_2000, name='High 2000', line = dict(color='firebrick', width=4, dash='dot'))) fig.add_trace(go.Scatter(x=month, y=low_2000, name='Low 2000', line=dict(color='royalblue', width=4, dash='dot'))) # Edit the layout(重点修改这里,添加刻度标签映射) fig.update_layout( title=dict( text='Average High and Low Temperatures in New York' ), xaxis=dict( title=dict( text='Object Label' # 这里也可以把X轴标题改成你想要的内容 ), tickvals=month, # 原始的X轴刻度值 ticktext=label_object # 要显示的新标签 ), yaxis=dict( title=dict( text='Temperature (degrees F)' ) ), ) fig.show()
关键说明
- 所有的
fig.add_trace部分完全没改,x=month依然保留,所以图表的底层数据、线条形态、整体布局和原来一模一样 - 我们只是通过
tickvals和ticktext做了一个“显示映射”:Plotly会找到每个tickvals里的原始值,然后把它显示成ticktext里对应的内容,完全不影响底层的数据逻辑 - 如果你的数据是存在DataFrame里的,只需要把
tickvals换成df['month'],ticktext换成df['label_object']就行,逻辑完全一致
备注:内容来源于stack exchange,提问作者Ridsen
相关产品推荐
相关产品推荐

