Python:了解绘图语法

时间:2015-07-24 02:45:46

标签: python matplotlib

我不理解python的绘图语法/逻辑。到目前为止,我总是找到解决办法,但我认为现在是理解它的时候了。 我经常使用这个:

    fig = matplotlib.pyplot.figure()

然后我在该fig-object中添加一个子图:

    ax1 = fig.add_subplot(111)

然后我做任何事情:

    ax1.plot( .......... )

然后我保存它:

    fig.savefig("myfile")

为什么语法不仅仅是:

    fig = matplotlib.pyplot.figure()

然后在情节中添加你想要的任何东西:

    fig.plot()

然后保存:

    fig.savefig()

为什么要创建一个新对象(" ax1 =")?是因为你可以在fig对象中有多个subplot对象,而ax1只是指向对象中子对象的指针?但是如果在fig对象中有2个子对象并说savefig会发生什么呢?然后保存哪个子对象?

最后但并非最不重要:为什么我当前的代码不起作用?

    fig = matplotlib.pyplot.figure()
    ax1 = fig.add_subplot(111)
    ax1.bar(range(3822), a_vals, color = 'r')
    fig.savefig("plot_file")

在结果中,条形图不是红色,它是黑色的吗?

1 个答案:

答案 0 :(得分:4)

这里有几个问题。特别是最后一个应该更好地单独发布。

  

为什么要创建一个新对象(" ax1 =")?是因为你可以在fig对象中有多个subplot对象,而ax1只是指向对象中子对象的指针?

是的,这是正确的。

  

但是如果在fig对象中有2个子对象并说savefig会发生什么?然后保存哪个子对象?

整个人物得到了保存。您可能希望在同一图中有几个图并排显示

plot grid

http://matplotlib.org/examples/statistics/boxplot_demo.html

或者,也许,一个情节作为较大的插图

insets

http://matplotlib.org/examples/pylab_examples/axes_demo.html

在任何情况下,figure都是您绘制的画布,而且它是保存的东西。您可能会争辩说,为每个图形的一个绘图的默认情况提供快捷方式会很方便,但据我所知,它只存在于" matlab" -style状态接口中,而不是在Python中你正在使用的OO界面。

  

最后但并非最不重要:为什么我当前的代码不起作用?

bar()有两种颜色设置:边框颜色(关键字edgecolor)和填充颜色(关键字color)。前一个的默认值是黑色。由于你有很多条形和非零边缘厚度,所以你看到的是黑色的边缘(你可以通过将条形数量从3822减少到几十个来测试它)。

因此,您有两种方式:

  1. edgecolor设置为您想要的内容:

    ax1.bar(range(3822), a_vals, color = 'r', edgecolor='r')
    
  2. 或者,更好的是,根本不绘制边缘并使用填充颜色:

    ax1.bar(range(3822), a_vals, color = 'r', linewidth=0)
    
  3. 示例:

    import numpy
    import matplotlib
    matplotlib.use('Agg')
    import matplotlib.pyplot
    
    a_vals = numpy.random.normal(size=3822)
    
    fig = matplotlib.pyplot.figure()
    ax1 = fig.add_subplot(111)
    ax1.bar(range(3822), a_vals, color = 'r', linewidth=0)
    fig.savefig("plot_file")
    

    enter image description here