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

如何绘制连接plt.scatter生成的散点的折线图?

问题描述

我编写了如下Python代码,模拟抛硬币1000次并计算每次试验的正面朝上概率,使用plt.scatter绘制散点,尝试用plt.plot绘制折线但未得到连贯的连线效果——结果图仅显示离散的蓝色散点和一条y=0.5的红色参考虚线,没有连接散点的折线。希望了解如何绘制连接这些散点的折线图。

import numpy as np
import matplotlib.pyplot as plt

n = 1000
count = 0
i=1

plt.xlabel("Times")
plt.ylabel("Prob")
plt.axhline(y = 0.5, c = 'r', linestyle = '--')

while i <= 1000:
    temp = np.random.choice(["H","T"],1,replace=True)
    
    if (temp == "H"):
        count = count + 1
    prob = count / i
        
    plt.scatter(i,prob,c='b')
    plt.plot(i,prob)
    
    i = i+1
    
    plt.title("Coin : p(H) = {}".format(round(prob,4)))
    
plt.show()
解决方案

问题根源是你在循环中每次调用plt.plot(i, prob)时,只传入了单个x、y值,matplotlib无法将孤立的单个点连成线。正确做法是先收集所有试验次数和对应概率的数据,循环结束后一次性绘制折线。

修改后的代码如下:

import numpy as np
import matplotlib.pyplot as plt

n = 1000
count = 0
i = 1
# 初始化列表存储所有试验次数和对应概率
x_data = []
y_data = []

plt.xlabel("Times")
plt.ylabel("Prob")
plt.axhline(y=0.5, c='r', linestyle='--')

while i <= n:
    temp = np.random.choice(["H", "T"], 1, replace=True)
    if temp == "H":
        count += 1
    prob = count / i
    
    # 将每次的试验次数和概率存入列表
    x_data.append(i)
    y_data.append(prob)
    
    plt.scatter(i, prob, c='b', s=5)  # s参数可调整散点大小
    i += 1

# 循环结束后绘制连贯折线
plt.plot(x_data, y_data, c='g', linewidth=1)
# 设置最终标题,显示最后一次计算的概率
plt.title(f"Coin : p(H) = {round(y_data[-1], 4)}")

plt.show()

关键修改说明

  • 新增x_data和y_data列表,用于批量存储所有试验的次数和对应概率
  • 循环内不再单独调用plt.plot,仅完成数据收集和散点绘制
  • 循环结束后通过plt.plot(x_data, y_data)一次性绘制连接所有点的折线
  • 可选优化:通过s参数调整散点大小、linewidth调整折线宽度,让图表更美观

内容的提问来源于stack exchange,提问作者misoneder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 02:30:53