当使用如下代码保存使用 plt.savefig
保存生成的图片时,结果打开生成的图片却是一片空白。
例如:
# 导入可视化工具包
import matplotlib.pyplot as plt
%matplotlib inline
# 颜色和标签列表
colors_list = ['red', 'blue', 'green']
labels_list = ['setosa', 'versicolor', 'virginica']
# 需要将DataFrame转成ndarray,才能进行 df[pre==i,0]
df = df
for i in range(3):
plt.scatter(df[pre==i,0], df[pre== i,1], s=100,c=colors_list[i],label = labels_list[i])
# 聚类中心点
plt.scatter(center[:,0],center[:,1], s=300,c='black',label='Centroids')
plt.legend()
plt.xlabel('sepal length')
plt.ylabel('petal length')
plt.show()
plt.savefig('F:\\Apython\\works-wpp\\数据挖掘基础\\k-means.png')
其实产生这个现象的原因很简单:在 plt.show()
后调用了 plt.savefig()
,在 plt.show()
后实际上已经创建了一个新的空白的图片(坐标轴),这时候你再 plt.savefig()
就会保存这个新生成的空白图片。
知道了问题产生的原因之后,就可以解决问题了,首先解决办法有两种:
1. 在 plt.show()
之前调用 plt.savefig()
;
# 导入可视化工具包
import matplotlib.pyplot as plt
%matplotlib inline
# 颜色和标签列表
colors_list = ['red', 'blue', 'green']
labels_list = ['setosa', 'versicolor', 'virginica']
# 需要将DataFrame转成ndarray,才能进行 df[pre==i,0]
df = df
for i in range(3):
plt.scatter(df[pre==i,0], df[pre== i,1], s=100,c=colors_list[i],label = labels_list[i])
# 聚类中心点
plt.scatter(center[:,0],center[:,1], s=300,c='black',label='Centroids')
plt.legend()
plt.xlabel('sepal length')
plt.ylabel('petal length')
plt.savefig('F:\\Apython\\works-wpp\\数据挖掘基础\\k-means.png')
plt.show()
2. 画图的时候获取当前图像(这一点非常类似于 Matlab 的句柄的概念):
# 导入可视化工具包
import matplotlib.pyplot as plt
%matplotlib inline
# 颜色和标签列表
colors_list = ['red', 'blue', 'green']
labels_list = ['setosa', 'versicolor', 'virginica']
# 需要将DataFrame转成ndarray,才能进行 df[pre==i,0]
df = df
for i in range(3):
plt.scatter(df[pre==i,0], df[pre== i,1], s=100,c=colors_list[i],label = labels_list[i])
# 聚类中心点
plt.scatter(center[:,0],center[:,1], s=300,c='black',label='Centroids')
plt.legend()
plt.xlabel('sepal length')
plt.ylabel('petal length')
fig = plt.gcf()
plt.show()
fig1.savefig('F:\\Apython\\works-wpp\\数据挖掘基础\\k-means.png',dpi=100)
问题就解决了。