如何绘制连接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
相关产品推荐
相关产品推荐

