You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 19:24:25