python – 使用不同matplotlib版本绘图的差异
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 使用不同matplotlib版本绘图的差异,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2469字,纯文字阅读大概需要4分钟。
内容图文
![python – 使用不同matplotlib版本绘图的差异](/upload/InfoBanner/zyjiaocheng/717/c8422c5fe6d8462c94c10d50fac662e6.jpg)
我的一位同事递给我一个脚本,用于从数据库中收集数据并绘制它.当我自己使用脚本时,这些图看起来并不相同,而且它与Matplotlib的版本有关.
绘制数据的脚本非常简短:
import matplotlib.pyplot as plt
import csv
import os
from dateutil import parser
def plot(outputDir,plotsDir,FS):
allfiles = os.listdir(outputDir)
flist = []
for f in allfiles:
if 'csv' in f.lower(): flist.append(f)
for f in flist:
with open(outputDir + '/' + f, 'rt') as ff:
data = list(csv.reader(ff,delimiter=FS))
values = [i[2] for i in data[1::]]
values = ['NaN' if v is '' else v for v in values]
time = [parser.parse(i[1]) for i in data[1::]]
plt.xlabel('Time_[UTC]')
plt.plot(time, values)
plt.xticks(rotation=40)
if os.path.isdir(plotsDir) != 1:
os.mkdir(plotsDir, 777)
plt.savefig('{}/{}_Data.png'.format(plotsDir, f[:-4]), bbox_inches='tight', dpi=160)
plt.clf()
outputdir = 'C:/Users/matthijsk/Documents/Test'
plotsdir = outputdir + '/plots'
fs = ','
plot(outputdir, plotsdir, fs)
当我使用Matplotlib版本2.1.0运行它时,我的图像如下所示:
当我使用Matplotlib版本2.0.2运行它时,它看起来应该是这样的:
脚本正在读取的文件如下所示:
stationNo,dtg(UTC),TT_[°C],source_TT,quality_TT
10381,2017-01-01 00:00:00,3.0,ob,na
10381,2017-01-01 01:00:00,3.0,ob,na
10381,2017-01-01 02:00:00,2.4,ob,na
10381,2017-01-01 03:00:00,2.5,ob,na
10381,2017-01-01 04:00:00,2.5,ob,na
10381,2017-01-01 05:00:00,2.3,ob,na
10381,2017-01-01 06:00:00,1.9,ob,na
10381,2017-01-01 07:00:00,1.0,ob,na
10381,2017-01-01 08:00:00,0.1,ob,na
10381,2017-01-01 09:00:00,0.9,ob,na
任何人都可以解释我在Matplotlib中发生了什么变化导致了这一点?而且显然我正在做一些导致这种情况的阴谋.谁能注意到一个错误?
我已经尝试过了
values = [float(value) if value.isnumeric() else None for value in values]
但这并没有解决它.
注意:我宁愿不使用任何非标准软件包(如Pandas),因为获得批准安装此类软件包非常麻烦.
解决方法:
数据以字符串形式读入.在matplotlib 2.0中,这些被自动转换为浮点数,以便可以绘制它们.
在matplotlib 2.1,categorical plots have been introduced中.这现在允许类似的东西
plt.plot(["apple", "banana", "cherry"], [2,1,3])
虽然这对于某些应用程序当然很好,但它打破了以前的选项,即绘制可转换为浮点数的字符串.我想如果这很好,它只是让用户有责任自己进行转换.
在这种情况下,您可能希望执行此转换
values = [None if v is '' else float(v) for v in values]
如果你已经有一个numpy数组:np.array(values).astype(float)
通常,可以使用numpy.loadtxt将文件读入float数组.如果文件包含日期,则可以使用reading a comma-delimited file with a date object and a float with Python中的转换器.
读入文本文件的另一个选项是pandas.read_csv.
内容总结
以上是互联网集市为您收集整理的python – 使用不同matplotlib版本绘图的差异全部内容,希望文章能够帮你解决python – 使用不同matplotlib版本绘图的差异所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。