我不理解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")
在结果中,条形图不是红色,它是黑色的吗?
答案 0 :(得分:4)
这里有几个问题。特别是最后一个应该更好地单独发布。
为什么要创建一个新对象(" ax1 =")?是因为你可以在fig对象中有多个subplot对象,而ax1只是指向对象中子对象的指针?
是的,这是正确的。
但是如果在fig对象中有2个子对象并说savefig会发生什么?然后保存哪个子对象?
整个人物得到了保存。您可能希望在同一图中有几个图并排显示
(http://matplotlib.org/examples/statistics/boxplot_demo.html)
或者,也许,一个情节作为较大的插图
(http://matplotlib.org/examples/pylab_examples/axes_demo.html)
在任何情况下,figure
都是您绘制的画布,而且它是保存的东西。您可能会争辩说,为每个图形的一个绘图的默认情况提供快捷方式会很方便,但据我所知,它只存在于" matlab" -style状态接口中,而不是在Python中你正在使用的OO界面。
最后但并非最不重要:为什么我当前的代码不起作用?
bar()
有两种颜色设置:边框颜色(关键字edgecolor
)和填充颜色(关键字color
)。前一个的默认值是黑色。由于你有很多条形和非零边缘厚度,所以你看到的是黑色的边缘(你可以通过将条形数量从3822
减少到几十个来测试它)。
因此,您有两种方式:
将edgecolor
设置为您想要的内容:
ax1.bar(range(3822), a_vals, color = 'r', edgecolor='r')
或者,更好的是,根本不绘制边缘并使用填充颜色:
ax1.bar(range(3822), a_vals, color = 'r', linewidth=0)
示例:
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")