从 CSV 文件 python 中绘制 3 个不同的列

问题描述 投票:0回答:2

我的目标是使用排序后的结果数据在同一窗口上绘制每年的“月份与平均温度”图。

我已经对分别具有年份和月份的前两列进行了排序,然后将新排序的数据保存到名为

NewFile
的文件中,但我似乎无法在这里找到解决方案,我使用了
csv
读者,现在我正在使用 numpy

代码:

import numpy as np
import matplotlib.pyplot as plt
plt.style.use('ggplot')

csv1 = open('Data_5.1.csv')
data = np.array(list(csv.reader(csv1,delimiter=',').astype("string")

year = data[:,0]
month = data[:,1]
temp= data[:,3]

fig, ax = plt.subplots(figsize=(10,10))
ax.plot(year, month, label='month/year')
ax.plot(year, temp, label='year/temp')

 plt.legend()

但它只是抛出一个错误:

File "<ipython-input-282-282e91df631f>", line 9
year = data[:,0]
   ^
SyntaxError: invalid syntax

我将放置两个文件链接,分别是 Data_5.1NewFile

数据_5.1 新建文件

python csv sorting plot
2个回答
0
投票

1 - 您没有在第 6 行中关闭括号,因此您在第 8 行中收到错误。

2 - 第 6 行不需要 astype("string")。

我修复了你的代码,但你必须完成子图。祝你好运!

import numpy as np
import matplotlib.pyplot as plt
import csv
plt.style.use('ggplot')

csv1 = open('Data_5.1.csv')
data = np.array(list(csv.reader(csv1,delimiter=',')))



year = data[:,0]
mounth = data[:,1]
temp= data[:,3]


fig, ax = plt.subplots(2,2) #This will create 4X4 subplots in one window

ax[0,0].plot(year, mounth, label='mounth/year') #This will plot in the 0,0 subplot
ax[0,1].plot(year, temp, label='year/temp') #This will plot in the 0,1 subplot
'''
For you to continue.
'''


plt.legend()
plt.show()

-1
投票

您的数据位于 CSV 文件中,并且其类型不同。 Pandas 确实是更合适的工具。

由于编码错误,我不得不稍微调整你的 CSV,最终的结果如下:

year,Month,Other Month,temperature_C
2003,Jan.,Some val,17.7
2004,Jan.,Some val,19.5
2005,Jan.,Some val,17.3
2006,Jan.,Some val,17.8
...

以下是您共享的代码在重构后的大概样子:

import matplotlib.pyplot as plt
import pandas as pd

plt.style.use('ggplot')

# csv1 = open('Data_5.1.csv')
# data = np.array(list(csv.reader(csv1,delimiter=',').astype("string")

df_1 = pd.read_csv('../resources/Data_5.1.csv', header=0, names=['year', 'month', 'some_col', 'temp'],
                   dtype={'some_col': str, 'temp': float, 'month': str, 'year': str})

year = df_1['year']
month = df_1['month']
temp = df_1['temp']

fig, ax = plt.subplots(figsize=(10, 10))
ax.plot(year, month, label='month/year')
ax.plot(year, temp, label='year/temp')
plt.show()

如果您有任何疑问,请告诉我:)

© www.soinside.com 2019 - 2024. All rights reserved.