如何仅移除图例中标记点的连线(保留图表内连线)
如何仅移除图例中标记点的连线(保留图表内连线)
嘿,我懂你的需求——图表里的连线得好好留着,但图例只想要显示标记,不想看到标记中间的线对吧?你之前的代码之所以把图表里的线也搞没了,是因为handles直接关联着图表上的实际绘图元素,修改它的样式自然会同步影响到原图本身。
给你两个实用的解决办法:
方法一:复制图例手柄,修改副本不影响原图
这种方法适合你已经画好图,只想调整图例的场景:
import matplotlib.pyplot as plt # 假设你已经完成了误差棒和连线的绘制,获取原手柄和标签 handles, labels = ax.get_legend_handles_labels() # 重新创建一组仅含标记的手柄副本 new_handles = [] for h in handles: # 复制原标记的样式(颜色、标记类型、大小),但把连线设为无 new_h = plt.Line2D([], [], marker=h.get_marker(), color=h.get_color(), linestyle='', markersize=h.get_markersize()) new_handles.append(new_h) # 用新的手柄生成图例,这样就不会改动原图的连线啦 ax.legend(new_handles, labels)
方法二:绘图时直接指定图例专用手柄
如果是从头开始绘图,可以提前规划图例的样式,避免后续调整:
import matplotlib.pyplot as plt # 绘制你的连线和误差棒(这里用示例数据) x = [1,2,3,4] y = [2,4,3,5] err = [0.3, 0.5, 0.4, 0.2] # 先画连线和误差棒,保存连线对象 line, = ax.plot(x, y, marker='o', linestyle='-', color='blue') ax.errorbar(x, y, yerr=err, fmt='o', color='blue') # 创建一个仅显示标记的图例专用手柄 legend_handle = plt.Line2D([], [], marker=line.get_marker(), color=line.get_color(), linestyle='', markersize=line.get_markersize()) # 用这个手柄创建图例 ax.legend([legend_handle], ['你的数据系列'])
这两种方法都能实现“图表留连线,图例只显标记”的效果,你可以根据自己的情况选~
备注:内容来源于stack exchange,提问作者Djova
相关产品推荐
相关产品推荐

