Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python高效地以csv格式绘制表格_Python_Csv_Numpy_Matplotlib_Plot - Fatal编程技术网

使用Python高效地以csv格式绘制表格

使用Python高效地以csv格式绘制表格,python,csv,numpy,matplotlib,plot,Python,Csv,Numpy,Matplotlib,Plot,我正在尝试使用Python绘制csv格式的表。到目前为止,通过在网站上阅读类似的问题,我能够得到我想要的结果,但我的解决方案似乎不太“pythonic”,我也没有找到一种非常简单的方法来做到这一点。我确信有一种更有效的方法来绘制表,所以我问这个问题是为了进一步了解Python,并让其他人对同样的问题有一个直接的答案。下面是: 我有一个包含数据的表,它有标题和第一列。就我而言,分别是几个月和几年。i、 e: 年,1月,2月,3月,4月,5月,6月,7月,8月,9月,10月,11月,DIC 1998

我正在尝试使用Python绘制csv格式的表。到目前为止,通过在网站上阅读类似的问题,我能够得到我想要的结果,但我的解决方案似乎不太“pythonic”,我也没有找到一种非常简单的方法来做到这一点。我确信有一种更有效的方法来绘制表,所以我问这个问题是为了进一步了解Python,并让其他人对同样的问题有一个直接的答案。下面是:

我有一个包含数据的表,它有标题和第一列。就我而言,分别是几个月和几年。i、 e:

年,1月,2月,3月,4月,5月,6月,7月,8月,9月,10月,11月,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)
我发现这个解决方案对于一个非常简单的任务来说太复杂了。有没有更好的方法来实现相同的结果或部分代码我可以改进?甚至可能是一个自动执行此操作的函数

谢谢。

< P>你可以考虑使用这个MunTIG +绘图数据。

我并没有一直遵循您的逻辑(即掩码),但下面是以下两行的输出(部分数据):


您拥有的东西越多(例如,处理丢失的数据等),代码行之间的差异就越长。Numpy很好,但您可能应该使用更高级别的库(构建在它之上!)——来处理这类内容。

我将根据@Ami Tavory的答案发布我的最终解决方案

import pandas as pd
import seaborn as sns

df = pd.read_csv('LakeLevels.csv', delimiter=',', index_col='Year')
sns.heatmap(df)
因此,通过使用这两个软件包(即熊猫和海洋生物),我能够在两行代码中获得我想要的结果


致以最诚挚的问候。

您希望如何准确地绘制它?很抱歉没有澄清这一点。我想我的示例代码说明了这一点。pcolor或imshow就可以了。在小表格中,在每个“正方形”上添加标签看起来不错,不过我相信其他问题也能回答这个问题。考虑到
numpy
数组的性质,我认为命名我想要的图的正确方法是“热图”,它看起来像一个简单的解决方案,甚至很聪明。与
pandas
numpy
不同,numpy没有包含行和列标签的
表的概念。感谢您的回答。我一定会去看看熊猫。至于结果,您的答案并没有真正得到我想要的绘图类型(pcolor或imshow类型的绘图),但我确实知道在熊猫上导入csv是多么容易。顺便说一句,掩蔽是为了“隐藏”pcolor绘图中的nan值(如果没有,我只得到两种颜色:一种用于数据,另一种用于nan值)。我明白你的意思了。再次强调一下(虽然它确实反映在你的评论中),我的观点不是要准确地再现你的情节(在面具上迷路了),而是要指出
numpy
对于这些东西来说(IMHO)太低级了。简单而完美。非常感谢你。我仍然在从Matlab切换到Python,直到现在我才知道熊猫。这就成功了。顺致敬意,
import pandas as pd
import seaborn as sns

df = pd.read_csv('LakeLevels.csv', delimiter=',', index_col='Year')
sns.heatmap(df)