python运行程序出现红色空白图片_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)

问题就解决了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值