使用Pandas绘制DataFrame折线图时如何为各列配置不同marker
问题原因
你遇到的TypeError: unhashable type: 'set'报错有两层原因:
- 你给
marker参数传入了用{}定义的集合(set)结构,该类型无法被pandas的绘图接口解析 - pandas内置
DataFrame.plot的marker参数默认仅支持传入单个标记样式,无法直接通过传入序列为不同列的折线分配不同标记
解决方案(最小改动,适配原代码逻辑)
你只需要在原有绘图逻辑的基础上,获取绘图返回的坐标轴对象,再遍历修改每条折线的标记样式即可,示例代码如下:
# 按df列的顺序定义对应的标记样式,用列表而非集合 markers = ['s', 'o', 'D', 'P', '^'] # 原有绘图逻辑,保存返回的坐标轴对象 ax = df.plot(kind='line', markersize=10) # 遍历所有折线,逐一设置标记 for line, marker in zip(ax.lines, markers): line.set_marker(marker)
可选方案:逐列绘制单独指定标记
如果你需要对每列折线的样式做更多自定义,也可以逐列调用绘图接口,每列单独指定标记:
import matplotlib.pyplot as plt markers = ['s', 'o', 'D', 'P', '^'] fig, ax = plt.subplots() # 遍历每列和对应的标记逐一绘制 for col, marker in zip(df.columns, markers): df[col].plot(ax=ax, label=col, marker=marker, markersize=10) # 显示图例 ax.legend() plt.show()
内容的提问来源于stack exchange,提问作者Dorito0102
相关产品推荐
相关产品推荐

