seaborn lineplot绘制时图例marker标记符号缺失如何解决
问题原因
你当前的写法是给sns.lineplot传入全局的marker="o"参数,该参数属于所有数据系列共享的通用样式,seaborn默认只会将hue/style等分组映射对应的差异化属性纳入图例生成逻辑,因此全局设置的marker不会在图例中展示。
解决方案
方法1:绑定style参数(推荐)
将分组变量同时绑定到style参数,再通过markers参数统一设置所有分组的marker为o,同时关闭默认的虚线区分,即可和原绘图效果保持一致,仅新增图例marker展示:
import seaborn as sns import matplotlib.pyplot as plt fmri = sns.load_dataset("fmri") sns.lineplot( data=fmri, x="timepoint", y="signal", hue="event", style="event", # 和hue使用同一个分组变量 markers="o", # 所有分组统一使用o型标记 dashes=False # 关闭不同分组的线条虚实差异 ) plt.show()
方法2:手动修改图例属性
如果不想调整原绘图逻辑,也可以在绘图完成后手动更新图例句柄的marker属性:
import seaborn as sns import matplotlib.pyplot as plt fmri = sns.load_dataset("fmri") ax = sns.lineplot(data=fmri, x="timepoint", y="signal", hue="event", marker="o") # 手动给图例的每个线条句柄添加marker for handle in ax.get_legend().get_lines(): handle.set_marker("o") plt.show()
内容的提问来源于stack exchange,提问作者Barden
相关产品推荐
相关产品推荐

