如何在Matplotlib折线图中根据条件设置不同标记样式
实现Matplotlib折线图根据条件切换标记样式
要实现根据prime数组的值切换折线图标记,核心是把数据按条件拆分成两组,先绘制整体折线保证连贯性,再分别给两组点添加不同标记。另外原代码漏导入了matplotlib.pyplot,得补上,同时优化了质数判断函数避免错误。
修改后的完整代码
import random import matplotlib.pyplot as plt # 补上缺失的导入 def is_prime(n): if n <= 1: return False # 处理0、1的情况,避免误判为质数 for i in range(2, int(n**0.5)+1): # 优化循环范围,提升判断效率 if (n%i) == 0: return False return True a = [] b = [] prime = [] for i in range(20): prime.append(is_prime(i)) numero = random.randint(1, 100) a.append(numero) b.append(i) # 按prime值拆分数据 x_prime = [b[i] for i in range(len(b)) if prime[i]] y_prime = [a[i] for i in range(len(a)) if prime[i]] x_non_prime = [b[i] for i in range(len(b)) if not prime[i]] y_non_prime = [a[i] for i in range(len(a)) if not prime[i]] # 先绘制整体折线(不带标记) plt.plot(b, a, '--', color='green', linewidth=2) # 质数对应点用蓝色圆形标记 plt.scatter(x_prime, y_prime, marker='o', color='blue', s=90, zorder=5) # 非质数对应点用红色三角形标记 plt.scatter(x_non_prime, y_non_prime, marker='^', color='red', s=90, zorder=5) # 保留原有的标题、坐标轴标签和网格设置 font1 = {'family':'serif','color':'blue','size':20} font2 = {'family':'serif','color':'darkred','size':15} plt.title("Sports Watch Data", fontdict=font1) plt.xlabel("Average Pulse", fontdict=font2) plt.ylabel("Calorie Burnage", fontdict=font2) plt.grid(color='green', linestyle='--', linewidth=0.5) plt.show()
关键说明
- 补全
matplotlib.pyplot导入:原代码缺少这一步,运行会直接报错 - 优化质数判断:处理了n≤1的边界情况,同时通过平方根缩小循环范围,减少不必要的计算
- 数据拆分:用列表推导式把x、y数据按
prime的True/False分成两组,方便分别设置标记 - 分层绘制:先画折线保证整体连线,再用
scatter画标记,zorder=5确保标记显示在折线上方,不会被遮挡 - 自定义调整:标记样式(如
marker='o'、marker='^')、颜色、大小都可以根据需求修改
内容的提问来源于stack exchange,提问作者Alexander Bermúdez Castañeda
相关产品推荐
相关产品推荐

