2016-01-13 166 views
0

我正在绘制CSV文件的2列数据。情节在轴上没有千位分隔符逗号,这是我需要的。我在网上找到了一个解决方案,但我似乎无法让它为我工作。将逗号添加到数千,matplotlib,python

我得到一个错误信息类型错误: 'PolyCollection' 对象不是可迭代

下面是代码:

import pandas as pd 
import matplotlib.pyplot as plt 
import matplotlib.ticker as tkr 


data = pd.read_csv('data.csv') 

x = data['meas'] 
y = data['modeled'] 

xmin = 0 
xmax = 1500 
ymin = 0 
ymax = 1500 

#plt.subplots_adjust(hspace=5) 
#plt.subplot(121) 
fig, ax =plt.hexbin(x, y, cmap=plt.cm.gnuplot2_r) 
plt.axis([xmin, xmax, ymin, ymax]) 
plt.xlabel("Measured baseflow, in cfs") 
plt.ylabel("Simulated baseflow, in cfs") 
cb = plt.colorbar() 
cb.set_label('count') 
p2, = plt.plot([0,1500],[0,1500], c='g') 
l2 = plt.legend([p2], ["1:1 Line"], loc=2) 

ax.yaxis.set_major_formatter(
     tkr.FuncFormatter(lambda y, p: format(int(y), ','))) 



#plt.tight_layout(pad=10.0) 
plt.savefig('Fig13_hexbinDevBaseflows.jpg') 
plt.show() 

回答

0

plt.hexbin返回PolyCollection。 fig, ax = plt.hexbin(...)要求PolyCollection是可迭代的并且有两个部分,所以第一部分可以分配给fig,第二部分分配给ax。你可能想这个:

fig, ax = plt.subplots() 
plt.hexbin(x, y, cmap=plt.cm.gnuplot2_r) 

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
import matplotlib.ticker as tkr 

data = pd.DataFrame(np.random.randint(1500, size=(100, 2)), columns=['meas', 'modeled']) 
# data = pd.read_csv('data.csv') 

x = data['meas'] 
y = data['modeled'] 

xmin = 0 
xmax = 1500 
ymin = 0 
ymax = 1500 

fig, ax = plt.subplots() 
plt.hexbin(x, y, cmap=plt.cm.gnuplot2_r) 
plt.axis([xmin, xmax, ymin, ymax]) 
plt.xlabel("Measured baseflow, in cfs") 
plt.ylabel("Simulated baseflow, in cfs") 
cb = plt.colorbar() 
cb.set_label('count') 
p2, = plt.plot([0,1500],[0,1500], c='g') 
l2 = plt.legend([p2], ["1:1 Line"], loc=2) 

ax.yaxis.set_major_formatter(
     tkr.FuncFormatter(lambda y, p: format(int(y), ','))) 

plt.show() 

enter image description here

+0

是否有可能获得的彩条,这些逗号?我已应用此解决方案没有任何成功 – jpspeeddemon

+0

您可以使用[''cbar.ax.set_yticklabels'](http://stackoverflow.com/a/3831793/190597)。 – unutbu