我正在尝试使用Python绘制csv格式的表。到目前为止,我通过阅读网站上的类似问题得到了我想要的结果,但我的解决方案似乎并不太“pythonic”,也没有找到一种非常简单的方法。我确信有一种更有效的方式来绘制表格,所以我要问这个问题,以便更多地了解Python,并让其他人对同一问题有一个直接的答案。在这里:
我有一个包含数据的表,它有标题和第一列。就我而言,分别是几个月和几年。即:
年份,一月,二月,三月,四月,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DIC 1998年,0.78,0.60,0.50,0.50 ,,,,, 0.62,,0.45 1999,0.40,0.30,0.28,0.22,0.26,0.50,0.52,0.76,0.89,0.85,0.74,0.67 2000,0.58,0.58,0.51,0.47,0.63,0.92,1.00,1.00,0.99,1.00,0.96,0.91 2001,0.86,0.83,0.80,0.71,0.83,0.98,1.05,1.11,1.09,0.99,0.87,0.80 ...
如您所见,数据也缺失。
我的解决方案如下:
import numpy as np
from matplotlib import pyplot as plt
#Import Data
Data=np.genfromtxt('LakeLevels.csv',delimiter=',',names=True,dtype=float)
#Extract data
Months=list(Data.dtype.names[1:])
Years=Data['Year']
Level=Data.view(dtype=float).reshape(Data.shape + (-1,))[:,1:]
Level_masked= np.ma.array (Level, mask=np.isnan(Level))
#Plot
fig=plt.pcolor(np.linspace(1,12,12),Years,Level_masked)
plt.colorbar()
plt.xticks(range(12),Months,rotation=45)
我发现解决方案过于复杂,无法执行非常简单的任务。是否有更好的方法来实现相同的结果或部分代码我可以改进?甚至可能是自动执行此操作的功能。
提前致谢。
答案 0 :(得分:1)
您可以考虑使用Pandas进行重叠+数据绘图。
我没有完全遵循你的逻辑(即掩码),但这里是以下两行的输出(部分数据):
import pandas as pd
df = pd.read_csv('stuff.csv', delimiter=',', index_col='year').T.plot();
您拥有的内容越多(例如,处理丢失的数据等) - 代码行的差异就越长。 Numpy很棒,但你应该使用更高级别的库(构建它!) - 对于这类东西。
答案 1 :(得分:0)
我将根据@Ami Tavory的回答发布我的最终解决方案。
import pandas as pd
import seaborn as sns
df = pd.read_csv('LakeLevels.csv', delimiter=',', index_col='Year')
sns.heatmap(df)
因此,通过使用这2个包(即熊猫和海鸟),我能够在2行中得到我想要的结果!
最好的问候。