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

如何在Matplotlib中实现X/Y轴间红蓝箭头以复现目标CDF图?

解决CDF图中红蓝箭头的绘制问题

你的代码核心问题在于随机生成的random_y并非对应random_x在CDF曲线上的实际累积概率值,且箭头样式使用了错误的HTML转义字符,导致无法复现目标效果。以下是修正后的代码:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import FancyArrowPatch

# 生成正态分布随机数据
data = np.random.normal(0, 1, 100)
sorted_data = np.sort(data)
cdf = np.arange(1, len(sorted_data) + 1) / len(sorted_data)

plt.figure(figsize=(8, 6))
plt.plot(sorted_data, cdf, label='经验CDF')

# 随机选择x轴上的点,插值计算对应CDF值
random_x = np.random.choice(sorted_data, 1)[0]
cdf_value = np.interp(random_x, sorted_data, cdf)

# 绘制红色垂直箭头(从x轴到CDF曲线)
arrow_red = FancyArrowPatch(
    (random_x, 0), (random_x, cdf_value),
    color='red', arrowstyle='->', mutation_scale=15, linewidth=1.5
)
plt.gca().add_patch(arrow_red)

# 绘制蓝色水平箭头(从y轴到CDF曲线)
arrow_blue = FancyArrowPatch(
    (0, cdf_value), (random_x, cdf_value),
    color='blue', arrowstyle='->', mutation_scale=15, linewidth=1.5
)
plt.gca().add_patch(arrow_blue)

# 标注交点坐标
plt.annotate(
    f'({random_x:.2f}, {cdf_value:.2f})',
    (random_x + 0.1, cdf_value + 0.02), color='black'
)

plt.title('带箭头的累积分布函数(CDF)')
plt.xlabel('X轴')
plt.ylabel('累积概率')
plt.legend()
plt.grid(True)
plt.show()

关键修改说明

  • 使用np.interp()函数对random_x进行线性插值,得到其在CDF曲线上的对应累积概率值,确保箭头终点精准落在曲线上
  • 将箭头样式中的->替换为->,避免样式解析错误
  • 添加linewidth参数优化箭头线条粗细,贴近目标图视觉效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 03:28:17