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

如何提取Julia中PyPlot绘制直方图的坐标并导出用于GNUPlot?

提取Julia PyPlot直方图数据并保存到文本文件

没问题!要提取PyPlot直方图的坐标数据并保存成GNUPlot能处理的文本文件,关键是抓住plt.hist()函数返回的统计结果——它其实已经给了你所有需要的数据,不用额外去提取图像像素坐标~

步骤详解:

  1. 捕获直方图的核心数据
    当你调用plt.hist()时,它会返回三个值:

    • n:每个区间内的样本计数(也就是直方图柱子的高度)
    • bins:区间的边界值(比如10个区间会有11个边界点)
    • patches:绘图用的补丁对象(我们暂时不需要这个)

    修改你的代码,把这些值存下来:

    n, bins, patches = plt.hist(devx, 10)
    
  2. 整理成GNUPlot友好的数据格式
    GNUPlot处理直方图时,通常需要区间位置和对应计数。你可以选择两种常用格式:

    • 区间中点 + 计数(最常用,方便画中心对齐的柱子)
    • 区间左边界 + 计数(适合画左对齐的柱子)

    这里以区间中点为例,计算代码如下:

    # 计算每个区间的中点:相邻两个边界的平均值
    midpoints = (bins[1:end-1] + bins[2:end]) ./ 2
    
  3. 保存数据到文本文件
    用Julia的DelimitedFiles包可以轻松把数组写入文本文件,默认空格分隔(GNUPlot直接就能识别):

    using DelimitedFiles
    
    # 把中点和计数合并成二维数组
    hist_data = hcat(midpoints, n)
    
    # 写入文件,空格分隔
    writedlm("histogram_data.txt", hist_data, " ")
    

    如果你需要自定义数字格式(比如保留几位小数),可以手动循环写入:

    open("histogram_data.txt", "w") do io
        for (m, cnt) in zip(midpoints, n)
            # 格式化输出:中点保留4位小数,计数取整数
            write(io, @sprintf("%.4f %.0f\n", m, cnt))
        end
    end
    

完整代码示例

using PyPlot, DelimitedFiles

# 生成原始数据
devx = randn(10000)

# 创建直方图并捕获数据
figure("pyplot_histogram")
n, bins, patches = plt.hist(devx, 10)
grid("on")
xlabel("deviation in x direction in \$\mu m\$")
ylabel("number of deviations")

# 计算区间中点
midpoints = (bins[1:end-1] + bins[2:end]) ./ 2

# 保存数据到文本文件
hist_data = hcat(midpoints, n)
writedlm("histogram_data.txt", hist_data, " ")

在GNUPlot中使用该数据

打开GNUPlot后,用以下命令就能画出和PyPlot一致的直方图:

set style fill solid 0.5 border -1  # 设置柱子填充样式
set xlabel "deviation in x direction in μm"
set ylabel "number of deviations"
set grid  # 显示网格

# 绘制直方图,boxwidth设为区间宽度(自动计算)
plot 'histogram_data.txt' using 1:2 with boxes lw 2 title "X Direction Deviations"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:16:42