matplotlib:了解和更改以增量方式更新的散点图的轴标签

时间:2014-02-03 16:26:12

标签: python matplotlib plot

抱歉 - 我承认我不知道如何以一种非常明确的方式提出这个问题。

文档和之前的stackoverflow问题都有各种各样的点,似乎在某种程度上触及了这个问题,但它没有以任何方式组织或构建,我可以理解它与我正在努力实现的目标, StackOverflow问题看起来很窄,很难知道它们是否适用。

我有一个脚本可以为硬件设备生成的数据生成散点图。 绘图数据生成步骤循环通过硬件上的不同数据源,以在散布上绘制它们。 (原始剧本是由另一个人写的,不再是我们小组的)。据我所知,它将数据转储到一个匿名的散点图对象 - 可能是同一个 - 因为它的作用(以及我想要它做的)是将所有源的数据收集到同一个散点图上。

但现在我想改变沿着轴的标签大小 - 我能找到的所有在线信息似乎都暗示你必须通过创建一个名为的情节实例并通过它修改它来做到这一点。实例。但是我不知道如何确保每个连续源的所有数据都放在同一个实例中,这样当显示最终的图时,我得到一个图中所有源的散射。我该怎么做(然后修改相关的轴文本)?

实际的情节线是:

id_accumulator=0
for i in range(len(pfc)):
    data = numpy.asarray(pfc[i].getSpikes())
    if len(data) > 0:
       pylab.scatter(data[:,0], data[:,1] + id_accumulator, color='green', s=4) # s=1
    id_accumulator = id_accumulator + pfc[i].size
pylab.show()

比这个具体的例子说得更广泛,我将如何设置,以便我可以为X数据源设置Y个单独的图,每个图显示一些点的子集[S [x] [p]]其中S是一组数据源,x是一个源,p是一个数据点,然后我将每个轴的标签设置为任何大小(可能是字体)?

1 个答案:

答案 0 :(得分:1)

我已经注释了每行代码的代码片段:

id_accumulator = 0   # set up counter
for i in range(len(pfc)):  # loop over input data array
    data = numpy.asarray(pfc[i].getSpikes())  # get data from hardware?
    if len(data) > 0:  # if we have some data
       # plot it via pylab.scatter -> pyplot.scatter -> pyplot.gca().scatter
       pylab.scatter(data[:,0], data[:,1] + id_accumulator, color='green', s=4) # s=1
    id_accumulator = id_accumulator + pfc[i].size   # increment 
pylab.show()  # after the loop, show the window using pylab.show -> pyplot.show

原始代码有一些病态导入/命名方案。有关matplotlibpylabpyplot的解释,请参阅Which is the recommended way to plot: matplotlib or pylab?。缺点是你不应该使用pylab作为导入模块(至少有计划摆脱它)。

我将如何重写这段代码:

import matplotlib.pyplot as plt  # standard import
import numpy as np

fig, ax = plt.subplots(1, 1)     # make axes and figure objects
# do what ever axes level setup you want
ax.set_xlabel('text')

# iterate over input data
id_accumulator = 0
for _pfc in pfc:
    # get the data
    data = np.asarray(_pfc.getSpikes())
    if len(data) > 0:    # there should be a better check for this
        # plot the data
        ax.plot(data[:0], data[:1] + id_accumulator, 
                color='g', marker='o', linestyle='none')
    id_accumulator += _pcf.size   # update the offset count


# show the figure window

plt.show()

除非您打算更改数据集中标记的颜色或大小,否则最好不要使用plot而不使用任何行。

如果您想要玩很多axes,只需制作更多的轴对象即可。如果你想要单独的数字窗口

fig1, ax1 = plt.subplots(1, 1)
fig2, ax2 = plt.subplots(1, 1)

或者每个图像需要多个轴:

fig, ax_lst = plt.subplots(2, 2)

将为您提供2x2网格。 ax_lst是轴对象的2x2 ndarray。从这里你可以做任何数据源的排列< - >你想要的轴。