MCP*_*tor 30 matplotlib python-2.7 pandas
我有一组数据,我使用pandas数据框加载到python中.我想要做的是创建一个循环,为自己的框架中的所有元素打印一个图,而不是一个.我的数据是以这种方式构建的excel文件:
Index | DATE | AMB CO 1 | AMB CO 2 |...|AMB CO_n | TOTAL
1 | 1/1/12| 14 | 33 |...| 236 | 1600
. | ... | ... | ... |...| ... | ...
. | ... | ... | ... |...| ... | ...
. | ... | ... | ... |...| ... | ...
n
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止的代码:
import pandas as pd
import matplotlib.pyplot as plt
ambdf = pd.read_excel('Ambulance.xlsx',
sheetname='Sheet2', index_col=0, na_values=['NA'])
print type(ambdf)
print ambdf
print ambdf['EAS']
amb_plot = plt.plot(ambdf['EAS'], linewidth=2)
plt.title('EAS Ambulance Numbers')
plt.xlabel('Month')
plt.ylabel('Count of Deliveries')
print amb_plot
for i in ambdf:
print plt.plot(ambdf[i], linewidth = 2)
Run Code Online (Sandbox Code Playgroud)
我在考虑做这样的事情:
for i in ambdf:
ambdf_plot = plt.plot(ambdf, linewidth = 2)
Run Code Online (Sandbox Code Playgroud)
上面的内容并不是我想要的,它源于我对Pandas,MatplotLib等的不熟悉,看了一些文档虽然对我来说看起来甚至不需要matplotlib(问题2)
那么A)我如何为我的df和B中的每一列生成数据图.我是否需要使用matplotlib或者我应该只使用pandas来完成所有操作?
谢谢,
Ale*_*tke 39
好的,所以创建几个图的最简单方法是:
import matplotlib.pyplot as plt
x=[[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]]
y=[[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]]
for i in range(len(x)):
plt.figure()
plt.plot(x[i],y[i])
Run Code Online (Sandbox Code Playgroud)
请注意,您需要figure每次创建一个或pyplot将在创建的第一个中进行绘图.
如果要创建多个数据系列,您需要做的是:
import matplotlib.pyplot as plt
x=[[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]]
y=[[1,2,3,4],[2,3,4,5],[3,4,5,6],[7,8,9,10]]
plt.plot(x[0],y[0],'r',x[1],y[1],'g',x[2],y[2],'b',x[3],y[3],'k')
Run Code Online (Sandbox Code Playgroud)
您可以通过设置颜色列表来自动化它['r','g','b','k'],然后只调用此列表中的两个条目,并根据需要在循环中绘制相应的数据.如果你只是想以编程方式将数据系列添加到一个图中,那么就会这样做(每次都不会创建新图,所以所有内容都绘制在同一图中):
import matplotlib.pyplot as plt
x=[[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]]
y=[[1,2,3,4],[2,3,4,5],[3,4,5,6],[7,8,9,10]]
colours=['r','g','b','k']
for i in range(len(x)):
plt.plot(x[i],y[i],colours[i])
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.如果有什么matplotlib有一个很好的文档页面,有很多例子.
You can also use dictionaries that allows you to have more control over the plots:
import matplotlib.pyplot as plt
# plot 0 plot 1 plot 2 plot 3
x=[[1,2,3,4],[1,4,3,4],[1,2,3,4],[9,8,7,4]]
y=[[3,2,3,4],[3,6,3,4],[6,7,8,9],[3,2,2,4]]
plots = zip(x,y)
def loop_plot(plots):
figs={}
axs={}
for idx,plot in enumerate(plots):
figs[idx]=plt.figure()
axs[idx]=figs[idx].add_subplot(111)
axs[idx].plot(plot[0],plot[1])
return figs, axs
figs, axs = loop_plot(plots)
Run Code Online (Sandbox Code Playgroud)
Now you can select the plot that you want to modify easily:
axs[0].set_title("Now I can control it!")
Run Code Online (Sandbox Code Playgroud)
下面是如何在单独的窗口(框架)中生成图形的两个示例,以及如何生成图形并将它们保存到单独的图形文件中的示例。
好的,首先是屏幕上的示例。请注意,对于每个图形,我们使用plt.figure()的单独实例和plt.plot()。最后,我们必须调用plt.show()将其全部显示在屏幕上。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace( 0,10 )
for n in range(3):
y = np.sin( x+n )
plt.figure()
plt.plot( x, y )
plt.show()
Run Code Online (Sandbox Code Playgroud)
另一种方法是在循环内使用 plt.show(block=False) :
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace( 0,10 )
for n in range(3):
y = np.sin( x+n )
plt.figure()
plt.plot( x, y )
plt.show( block=False )
Run Code Online (Sandbox Code Playgroud)
现在,让我们生成图形,而是将它们每个都写入一个文件。在这里,我们将 plt.show() 替换为plt.savefig( filename )。与前一个示例的不同之处在于,我们不必在每个图中都考虑“阻塞”。另请注意,我们对文件名进行编号。在这里我们使用 %03d 以便我们可以方便地将它们按编号顺序排列。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace( 0,10 )
for n in range(3):
y = np.sin( x+n )
plt.figure()
plt.plot( x, y )
plt.savefig('myfilename%03d.png'%(n))
Run Code Online (Sandbox Code Playgroud)
如果您的要求是针对一列进行绘图,那么请随意使用它(首先将数据导入 pandas DF)(绘制具有 5 列和所需行数的图矩阵)
:
import math
i,j=0,0
PLOTS_PER_ROW = 5
fig, axs = plt.subplots(math.ceil(len(df.columns)/PLOTS_PER_ROW),PLOTS_PER_ROW, figsize=(20, 60))
for col in df.columns:
axs[i][j].scatter(df['target_col'], df[col], s=3)
axs[i][j].set_ylabel(col)
j+=1
if j%PLOTS_PER_ROW==0:
i+=1
j=0
plt.show()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
115126 次 |
| 最近记录: |