python - 将 x 和 y 值从 CSV 分配给 MatplotLib 散点图
问题描述
对于当前项目,我计划使用 MatplotLib 设置散点热图。xs 和 ys 的数据应从一个 CSV 文件中提供,该文件有两列都包含浮点数。
在此基础上,我还没有想出正确将 CSV 列分配给 xs 和 xy 的方法。例如,下面的示例产生错误TypeError: '_io.TextIOWrapper' object is not subscriptable
。有谁知道一个聪明的调整来使这个热图工作?
对应的代码如下所示:
# Importing CSV
df = open("heatmap.csv", "r", encoding="utf8")
# Assigning X, Y
xs = df[0]
ys = df[1]
resolution = 250
# Heatmap calculations
def data_coord2view_coord(p, vlen, pmin, pmax):
dp = pmax - pmin
dv = (p - pmin) / dp * vlen
return dv
def nearest_neighbours(xs, ys, reso, n_neighbours):
im = np.zeros([reso, reso])
extent = [np.min(xs), np.max(xs), np.min(ys), np.max(ys)]
xv = data_coord2view_coord(xs, reso, extent[0], extent[1])
yv = data_coord2view_coord(ys, reso, extent[2], extent[3])
for x in range(reso):
for y in range(reso):
xp = (xv - x)
yp = (yv - y)
d = np.sqrt(xp**2 + yp**2)
im[y][x] = 1 / np.sum(d[np.argpartition(d.ravel(), n_neighbours)[:n_neighbours]])
return im, extent
fig, axes = plt.subplots(2, 2)
for ax, neighbours in zip(axes.flatten(), [0, 16, 32, 64]):
if neighbours == 0:
ax.plot(xs, ys, 'k.', markersize=2)
ax.set_aspect('equal')
ax.set_title("Scatter Plot")
else:
im, extent = nearest_neighbours(xs, ys, resolution, neighbours)
ax.imshow(im, origin='lower', extent=extent, cmap=cm.jet)
ax.set_title("Smoothing over %d neighbours" % neighbours)
ax.set_xlim(extent[0], extent[1])
ax.set_ylim(extent[2], extent[3])
plt.show()
解决方案
我认为您的问题与热图的工作方式无关,而与您打开该 csv 文件的方式有关。我看不到您的导入以及打开“指向”的内容,但很可能您直接打开了 csv 文件,这意味着您必须编写代码来解析 csv 文件。
一个相当简单和流行的方法是使用 csv 模块 ( https://docs.python.org/3/library/csv.html ) 或 pandas ( https://pandas.pydata.org/pandas-docs/stable/参考/api/pandas.read_csv.html)。
推荐阅读
- python - Convert Sql server raw query through SqlAlchemy Orm in python
- python - 在Python中的数据框中成对的行之间减去
- excel - @符号放在间接前面时有什么作用?
- ruby-on-rails - 从 sidekiq 访问不同 docker 容器中的活动存储对象
- css - 我希望第一张图片上有文字,但第二张没有 - 可滑动
- javascript - TypeScript react - JSX 元素类型“Modal.Header”没有任何构造或调用签名
- python - 如何从神经网络模型输出中解码标准化值?
- powershell - 在 Powershell 5 中更改 PSModulePath
- javascript - 如何在屏幕中间生成不重叠的随机粒子?
- gitlab - 如何通过 API 比较 GitLab 中的两个不同标签?