Python-解决使用 plt.savefig 保存图片时一片空白

当使用如下代码保存使用 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)

问题就解决了。

你可能感兴趣的:(python,python)