【问题标题】:Plotting scatter points with matplotlib from a CSV file question从 CSV 文件问题中使用 matplotlib 绘制散点图
【发布时间】:2019-06-26 17:11:24
【问题描述】:

我已将网站中的一些数据提取到 CSV 文件中,我需要在 matplotlib 中从该 CSV 文件中绘制散点图。我只需要 CSV 文件中的第 2 列和第 3 列数据。

我正在尝试使用 for 循环将 CSV 数据收集到一个列表中,然后使用它来绘制散点图,但我收到了“ValueError: x and y must be the same size”错误。

import matplotlib.pyplot as plt
import csv

with open(cache_path + distance_csv) as csv_file:
reader = csv.reader(csv_file)

for column in reader:
    city_distance = [x[1] for x in csv.reader(csv_file)]
    crime_rate = [x[2] for x in csv.reader(csv_file)]

    plt.scatter(city_distance, crime_rate)
    plt.show()

我的 CSV 文件中的第 2 列和第 3 列长度相同 - 83 个单元格,但我收到了 ValueError。我在这里错过了什么?

【问题讨论】:

  • 请提供数据文件的链接。

标签: python csv matplotlib scatter-plot


【解决方案1】:

您的代码中有一些错误,我不知道是哪些错误导致了您的行为,但在您修复它们之后,您可以继续前进:

  1. 首先,看看您是如何阅读这些列的。请注意,您迭代 column in reader 但从不使用 column(您在 for 循环的每次迭代中创建两个新的 csv.readers)。稍后在此答案中查看可能的解决方案。
  2. 关于这一点,您正在阅读 'with' 语句范围之外的 csv_file,因此该文件已经关闭。如果您将使用 for 循环和 column,则无论如何都不必解决此问题。
  3. 您在每次迭代中都在进行绘图(因此您将创建 83 个绘图,我猜您不希望这样)。

所以一个可能的解决方案是:

import matplotlib.pyplot as plt
import csv

with open(cache_path + distance_csv) as csv_file:
  reader = csv.reader(csv_file)
city_distance, crime_rate  = [], []
for column in reader:
  city_distance.append(float(column[1]))
  crime_rate.append(float(column[2]))
plt.scatter(city_distance, crime_rate)
plt.show()

对于未来,我建议您尝试验证 len(city_distance)==len(crime_rate)。 我的意思是,不要在 csv 中检查您的数据,而是在代码中检查您的数据,在读取值之后和错误之前 - 以获得最有用的信息来继续。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-23
    • 2021-10-14
    • 2023-03-13
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    相关资源
    最近更新 更多