如何提取Julia中PyPlot绘制直方图的坐标并导出用于GNUPlot?
提取Julia PyPlot直方图数据并保存到文本文件
没问题!要提取PyPlot直方图的坐标数据并保存成GNUPlot能处理的文本文件,关键是抓住plt.hist()函数返回的统计结果——它其实已经给了你所有需要的数据,不用额外去提取图像像素坐标~
步骤详解:
捕获直方图的核心数据
当你调用plt.hist()时,它会返回三个值:n:每个区间内的样本计数(也就是直方图柱子的高度)bins:区间的边界值(比如10个区间会有11个边界点)patches:绘图用的补丁对象(我们暂时不需要这个)
修改你的代码,把这些值存下来:
n, bins, patches = plt.hist(devx, 10)整理成GNUPlot友好的数据格式
GNUPlot处理直方图时,通常需要区间位置和对应计数。你可以选择两种常用格式:- 区间中点 + 计数(最常用,方便画中心对齐的柱子)
- 区间左边界 + 计数(适合画左对齐的柱子)
这里以区间中点为例,计算代码如下:
# 计算每个区间的中点:相邻两个边界的平均值 midpoints = (bins[1:end-1] + bins[2:end]) ./ 2保存数据到文本文件
用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
相关产品推荐
相关产品推荐

