我对matplotlib
并不陌生,我非常惭愧地承认我一直将它作为一种工具,尽可能快速简便地获得解决方案。所以我知道如何获得基本情节,子图和东西,并且有不少代码可以不时重复使用......但我没有"深刻的(呃)知识" matplotlib
。
最近我想我应该改变这一点并通过一些教程自己动手。但是,我仍然对matplotlibs plt
,fig(ure)
和ax(arr)
感到困惑。真正的区别是什么?
在大多数情况下,对于某些人来说,快速的“肮脏”'绘图我看到人们只使用pyplot as plt
并直接用plt.plot
绘图。由于我经常使用多种内容进行绘制,因此我经常使用f, axarr = plt.subplots()
...但大多数情况下,您只会看到代码将数据放入axarr
并忽略图f
。
所以,我的问题是:什么是使用matplotlib的干净方式?何时仅使用plt
,figure
应该用于什么或应该用什么?子图是否只包含数据?或者对于样式,清理情节,......,在子图中都是有效且良好的做法?
我希望这不是广泛的。基本上我要求为plt
< - >的真正目的提出一些建议。 fig
< - > ax(arr)
(以及何时/如何正确使用它们)。
教程也欢迎。 matplotlib文档对我来说相当混乱。当人们搜索一些非常具体的东西时,比如重新标记一个图例,不同的情节标记和颜色等等,官方文档确实非常准确,但在我看来,一般信息并不是那么好。太多不同的例子,没有对目的的真正解释......看起来或多或少像是所有可能的API方法和参数的大清单。
答案 0 :(得分:12)
pyplot
是'脚本' matplotlib中的级别API(其最高级别的API,可以使用matplotlib做很多事情)。它允许您使用程序界面使用matplotlib,方法与使用Matlab进行操作相似。 pyplot
有一个“当前数字”的概念。和'当前轴'所有功能委托给(@tacaswell dixit)。因此,当您使用模块pyplot
上的可用功能时,您正在绘制当前数字'和'当前轴'。
如果你想要'细粒'控制您正在绘制的位置/内容然后您应该使用Figure
和Axes
的实例来使用面向对象的API。
pyplot
中可用的功能在Axes
中具有等效方法。
Figure
是此层次结构中的顶级容器。这是整个窗口/页面,所有内容都是绘制的。您可以拥有多个独立数字,Figure
可以包含多个轴。但是...
大多数情节都在Axes
上进行。轴实际上是我们绘制数据的区域以及与之相关的任何刻度/标签/等。通常我们会设置一个Axes
来调用子图(将Axes
放在常规网格上),因此在大多数情况下,Axes
和Subplot
是同义。
每个Axes
都有一个XAxis和一个YAxis。这些包含刻度线,刻度位置,标签等。
如果您想了解情节的解剖结构,可以访问link。
答案 1 :(得分:2)
我认为this教程很好地解释了matplotlib对象层次结构的基本概念,例如Figure和Axes,以及当前图形和当前Axes的概念。
如果要快速回答:有一个Figure对象,它是包装多个轴(与轴不同)的容器,该容器还包含较小的对象,例如图例,线条,刻度线...取自matplotlib documentation
所以当我们这样做
var express = require('express');
var app = express();
var path = require('path');
var lineReader = require('readline').createInterface({
input: require('fs').createReadStream(__dirname + '/disksTimeSeries/timeSeries')
});
app.use(express.static('public'))
app.get('/', function(req, res) {
res.send(index.html);
});
app.listen(3005);
var diskToTimeSeries = {};
var currDisk;
var prevDisk;
var currStr = "";
var seriesStr="";
var i = 0;
var disk;
var splitArr;
var data = {};
data['prevDisk'] = "";
data['seriesStr'] = "";
lineReader.on('line', function (line) {
console.log(line);
splitArr = line.split(",");
disk = splitArr[0] + "," + splitArr[1];
if (data['prevDisk'] && disk !== data['prevDisk'])
{
diskToTimeSeries[data['prevDisk']] = data['seriesStr'];
data['seriesStr'] = "";
}
else
{
data['prevDisk'] = disk;
data['seriesStr'] = data['seriesStr'] + (splitArr[2] + "," + splitArr[3] + "\n");
}
console.log(disk);
});
// viewed at http://localhost:8080
app.get('/disks', function(req, res) {
var diskIds = req.query.ids.split(":");
var resultStr = "";
diskIds.forEach(function(diskName){
resultStr += "disk name--" + diskName + "\n" + diskToTimeSeries[diskName];
});
res.send(resultStr);
});
module.exports = app;
我们创建了一个Figure对象和一个包含在该Figure中的Axes对象。
答案 2 :(得分:0)
pyplot
对于那些熟悉matlab并希望制作快速而肮脏的情节的人来说就像API一样的matlab figure
是面向对象的API,适用于那些不关心matlab样式绘图的人所以你可以使用其中任何一个,但也许不能同时使用。