gpt4 book ai didi

python - 使用 Excel 工作表中的数据在 Python 中绘制图表

转载 作者:太空狗 更新时间:2023-10-30 02:59:36 25 4
gpt4 key购买 nike

所以我目前在 Excel 电子表格中有很多数据。我需要通过 python 绘制它。我知道如何使用 xlrd 从 excel 文件中读取数据,我知道如何使用 matplotlib 在 python 中绘图。基本上,我的数据看起来包含 x 坐标、y 坐标以及正负 y 误差列。我需要一种方法来将数据从电子表格导入并成为图表上的点和误差线。老实说,我是 python 的新手,不知道为什么我的代码不起作用。

import xlrd
import numpy as np
import matplotlib.pyplot as plt
file_location = "C:/Users/Rima/Desktop/apjl731data.xlsx"
workbook = xlrd.open_workbook(file_location)
first_sheet = workbook.sheet_by_index(0)
for col in range(first_sheet.ncols):
x = first_sheet.cell_value(0,col)
y = first_sheet.cell_value(1,col)
yerr = first_sheet.cell_value(2,col)
plt.errorbar(x,y,yerr,fmt='r^')
plt.show()

我还没有找到如何在线执行此操作,只有如何使用 python 在 excel 中制作图表。我确定我的代码可能缺少很多功能,但我不确定是什么。同样对于 yerr,为了在数据点的顶部和底部获得不同的错误值,我一直将其作为数组传递 yerr = np.array([])每个点的误差值不同。我不知道如何导入数据,因为我的正错误和负错误位于电子表格的不同列中。如果有人知道如何导入数据,请帮忙,因为这会让我的生活更轻松,因为我不必手动输入 50 个数据点。谢谢!

编辑:我的数据的一个例子是

log(O/H)+12 positive error negative error virgo infall 距离
8.56 0.05 0.05 4.61
8.59 0.03 0.03 -
8.54 0.04 0.06 2.97297
8.94 0.13 0.12 8.24493

我的数据中确实有间隙,用 - 标记,我不知道在尝试绘制时这是否会导致错误。所以我可能需要一种方法来跳过这些行。再次感谢。

编辑 2:我仍然有错误,所以这里是回溯。 enter image description here

谢谢!

最佳答案

我做了一些假设。假设你的数据是这样的:

x y yerr_positive yerr_negative
1 1 0.1 0.2
2 2 0.1 0.2
3 3 0.1 0.2
4 4 0.1 0.2

我还稍微修改了加载数据的方式,以便将每一列加载到它自己的数组中,例如:

x = [first_sheet.cell_value(i, 0) for i in range(first_sheet.ncols)]

您可以使用 errorbar 通过传递以下形式的数组来获得一个值的正+负错误:

yerr = [y_error_negative, y_error_positive]

其中 y_error_negativey_error_positive 是长度与 y 相同的数组。

然后您应该具有以下内容:

import xlrd
import numpy as np
import matplotlib.pyplot as plt
file_location = "C:/Users/Rima/Desktop/apjl731data.xlsx"
workbook = xlrd.open_workbook(file_location)
first_sheet = workbook.sheet_by_index(0)

x = [first_sheet.cell_value(i, 0) for i in range(first_sheet.ncols)]
y = [first_sheet.cell_value(i, 1) for i in range(first_sheet.ncols)]
yerr_pos = [first_sheet.cell_value(i, 2) for i in range(first_sheet.ncols)]
yerr_neg = [first_sheet.cell_value(i, 3) for i in range(first_sheet.ncols)]

yerr = [yerr_neg, yerr_pos]

plt.errorbar(x,y,yerr,fmt='r^')

plt.axis([0,5,0,5])
plt.show()

这给出了这个: enter image description here

如果没有更多细节,回答起来有点困难。

编辑:

如果数据中有“-”,有很多方法可以忽略它。因此,按照我上面概述的方式快速破解,您可以重新检查 x 值:

x y yerr_positive yerr_negative
1 1 0.1 0.2
- 2 0.1 0.2
3 3 0.1 0.2
4 4 0.1 0.2

然后您将删除“-”并替换为 0,例如,

x = [float(i) if i != '-' else 0 for i in x]

另一种方法是在加载值时循环遍历它们,并执行 value if value.isdigit() else 0,而无需两个列表理解。

或者,你可以像你说的那样完全忽略它:

x = [float(i) for i in x if i!= '-']

如果您可以对 virgo 落入距离设置一些通用上限,那么最好不要浪费您的金属丰度数据。如果您不断收到类型错误,请提供更多信息。

关于python - 使用 Excel 工作表中的数据在 Python 中绘制图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31305809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com