【问题标题】:Save data from histogram in text file将直方图中的数据保存在文本文件中
【发布时间】:2021-01-12 18:12:55
【问题描述】:

目前我正在使用 matplotlib.pyplot 绘制直方图,以在直方图中绘制我的数据。 但现在我想将这些数据保存在文本文件中。在这里,我希望第一列是 x 值,第二列是 y 值。我该怎么做?

我按以下顺序绘制直方图:

import matplotlib.pyplot as plt

some_list = [0.42146137, 0.42146137, etc...]


plt.hist(some_list, bins = 900, histtype="step", cumulative=-1)
plt.yscale("log")

【问题讨论】:

  • cumulative=-1cumulative=True 相同,因为除 0 以外的任何数字都被认为是“真”。这是你真正想要的吗?
  • 实际上,如果累积的计算结果小于 0(例如,-1),则累积的方向是相反的。
  • 哇,wtf。我刚刚检查了文档,你是对的。我假设因为默认值是布尔值,所以它所做的只是打开/关闭该功能。

标签: python matplotlib histogram


【解决方案1】:

将 plt.hist() 赋值给一个值,那么第一个元素是 ys,第二个是 xs。 a = plt.hist(); ys = a[0]; xs = a[1]。然后你可以用任何方法写,比如pandas.DataFrame.to_csv(),这取决于你想要什么结构。请记住,xs 实际上是边界,从第一个的下限开始,到最后一个的上限结束,所以xs 的长度比ys 的长度大一个。

例如,如果您只想要上限,可能是这样的:pd.DataFrame({'x_upper':a[1][1:], 'y': a[0]}).to_csv(filename)

【讨论】:

  • 谢谢!之前从未使用过熊猫数据框,所以最后一个问题......如果我想要整个图表而不仅仅是上限怎么办。例如,我的第一个点是 0.4,最后一个点是 1.0,我希望每个 y 值的间隔为 0.01(所以 0.41, 0,42 ... 1)。
  • 嗯,我想不出一个超级简单的方法...可以在检查边界列表时对该序列执行 for 循环。或者也许将该序列作为单列数据框并在您的另一个表上进行一些花哨的连接。其他人可能有更清晰的想法。
  • 只是为了验证这是您真正想要的...因为您还可以强制 hist 的 bin 为每 0.01,这将为您提供较小 bin 的实际频率。我相信你所要求的基本上会给你一个直方图形状的折线图坐标,但对于那些较小的 0.01 箱来说不是正确的值。
  • 另外,如果有 900 个 bin,你的 x vals 实际上会比每 0.01 更接近...所以我想我不能 100% 确定你在问什么。
  • 啊,是的,在我的情况下,调整垃圾箱确实足够了 :)。谢谢!
猜你喜欢
  • 2019-05-30
  • 2013-09-30
  • 1970-01-01
  • 2021-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-24
相关资源
最近更新 更多