簡體   English   中英

使用CSV文件問題中的matplotlib繪制散點圖

[英]Plotting scatter points with matplotlib from a CSV file question

我已經從網站中提取了一些數據到CSV文件中,並且需要從該CSV文件中在matplotlib中繪制散點圖。 我只需要CSV文件中的第2列和第3列數據。

我試圖使用一個for循環將CSV數據收集到一個列表中,然后使用它來繪制散點圖,但出現“ ValueError:x和y必須為相同大小”錯誤。

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。 我在這里想念什么?

您的代碼中有一些錯誤,我不知道是哪個錯誤導致了您的行為,但是在修復所有錯誤之后,您可以繼續進行:

  1. 首先,看一下如何閱讀各列。 請注意,您要遍歷reader中的列,但不要使用column (在for循環的每次迭代中創建兩個新的csv.readers)。 之后在此答案中查看可能的解決方案。
  2. 關於這一點,您正在讀取“ with”語句范圍之外的csv_file ,因此該文件已被關閉。 如果您將使用for循環和 ,則無論如何都不必解決此問題。
  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中的數據,而是檢查代碼中的數據-以獲取最有用的信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM