我正在用pyplot写几个不同的图表到磁盘。其中大多数是for
图; scatter
特别抵制在其他地方运作的方法。
hist
此方法适用于所有散点图。下面是直方图的模拟,它不起作用。请注意,问题出在ind_list=range(175,185)
plt_fail_rate1=plt.scatter(ind_list,perf_fail_rate1)
plt.title('Proportion of Failed (size>1 and all unique) Clusters')
plt_fail_rate1.figure.savefig(paath+'/fail_rate1.png')
plt.clf()
上 - 如果我用savefig
替换该行,GUI中会出现一个正常的直方图
plt.show()
如果我使用distr_tmp=tf.opc_size_distr() # get a list from a class
plt_opc_size=plt.hist(distr_tmp)
plt.title('Number of Codes Per Cluster')
#plt.show()
#plt_opc_size.savefig(paath+'/size_distr.png')
#plt_opc_size.figure.savefig(paath+'/size_distr.png')
plt.clf()
,我会获得.figure.savefig()
。
如果我使用tuple object has no attribute figure
,我会获得.savefig()
。另外,在回复评论时,我尝试了tuple object has no attribute savefig
,但这也无效。
我使用python shell会话来验证特定于hist的问题。也就是说,如果您将.figure().savefig()
存储在某个变量中,则可以毫无问题地对该变量调用plt.scatter()
。因此,问题可归纳如下:
.figure.savefig()
请注意,如果您是在shell中对此进行测试,则在致电ind_list=[1,2,3]
data_list=[10,-5,-15]
x=plt.scatter(ind_list,data_list)
x.figure.savefig('test.png') # works fine on my laptop
hist_list=[1925,1970]
x=plt.hist(hist_list)
#plt.show() # shows a valid if sparse histogram in a new window
x.figure.savefig('test2.png') #all permutations fail
后需要小心(我相信请致电plt.clf()
),否则即使正确的通话也会因{{{}}而失败1}}错误。
答案 0 :(得分:1)
问题在于plt.hist()
returns a tuple containing 3 elements:
n:数组或数组列表
直方图箱的值。参见标准或密度和重量 有关可能的语义的描述。如果输入x是一个数组, 那么这是一个长度为nbins的数组。如果输入是序列数组 [data1,data2,..],那么这是一个值为的数组列表 每个数组的直方图顺序相同。
bins:array
垃圾箱的边缘。长度nbins + 1(nbins左边和右边 最后一个垃圾箱的边缘)。即使是多个数据集,也始终是一个数组 传入。
补丁:列表或列表列表
用于创建直方图或列表的各个补丁的静默列表 如果有多个输入数据集,则为此列表。
只有最后一个(补丁)是Artist
个对象的列表,其中包含对您图形的引用。
为了使您的代码有效,您必须执行以下操作:
plt_opc_size[2][0].figure.savefig(paath+'/size_distr.png')
[2]
访问元组的第3个元素(修补程序列表),[0]
访问该列表中的第一个Artist
。
但是,这不是编写代码的最佳方式。您可以使用Figure
获取对plt.gcf()
的引用。因此,以下内容适用于所有情况:
distr_tmp=tf.opc_size_distr() # get a list from a class
plt_opc_size=plt.hist(distr_tmp)
plt.title('Number of Codes Per Cluster')
plt.gcf().savefig(paath+'/size_distr.png')
plt.clf()