如何用Plotly Express绘制长格式DataFrame的指定子集数据?
在Plotly Express中筛选长格式DataFrame数据绘图的替代方法
除了创建DataFrame子集的方式,还有两种更灵活的方法可以实现长格式数据的指定筛选绘图:
方法1:直接在绘图函数中筛选数据(无需新建DataFrame)
不用单独创建新的DataFrame变量,直接在调用Plotly Express函数时传入筛选后的数据集,代码更紧凑简洁:
import pandas as pd import plotly.express as px df = px.data.gapminder().query("continent=='Europe'") countries = ['France', 'Spain', 'Italy', 'Germany'] # 方式1:用布尔索引筛选 fig2 = px.line(df[df['country'].isin(countries)], x='year', y='pop', color='country', title="Some Countries in Europe") fig2.show() # 方式2:用query方法更直观 fig2 = px.line(df.query("country in @countries"), x='year', y='pop', color='country', title="Some Countries in Europe") fig2.show()
方法2:先绘制全量数据,再隐藏不需要的轨迹
如果需要保留全量数据的交互能力(比如后续通过图例切换显示其他国家),可以先绘制所有数据,再通过update_traces隐藏目标外的轨迹:
import pandas as pd import plotly.express as px df = px.data.gapminder().query("continent=='Europe'") countries = ['France', 'Spain', 'Italy', 'Germany'] # 先绘制所有国家的曲线 fig2 = px.line(df, x='year', y='pop', color='country', title="Some Countries in Europe") # 隐藏不在目标列表中的轨迹 fig2.update_traces(visible=False, selector=lambda trace: trace.name not in countries) # 确保目标国家的轨迹可见 for country in countries: fig2.update_traces(visible=True, selector=lambda trace: trace.name == country) fig2.show()
两种方法各有适用场景:第一种适合只需要展示特定数据的场景,代码更简洁;第二种适合需要保留全量数据、支持交互切换的场景。
内容的提问来源于stack exchange,提问作者user44627
相关产品推荐
相关产品推荐

