使用ValueError:view limit minimum 0.0绘制离散折线图小于1,并且是无效的Matplotlib日期值

时间:2018-11-09 17:25:31

标签: python pandas matplotlib

我有一个数据框df,我打算绘制一个折线图,在该图中我们将窗口分为几个子图,每组一个。然后,每一列都由一条显示在其唯一子图上的粗线表示,而其他列则像下面的图片一样谨慎显示,这样就不会导致意粉图的出现。数据框的尺寸为(30,26)

Index        DateTimestamp              0.0      5.0     34.0 ... 22.0 
  0        2017-08-03 00:00:00           10        0      10       0
  1        2017-08-04 00:00:00           20       60    1470      20
  3        2017-08-05 00:00:00           0        58       0      24
  4        2017-08-06 00:00:00           0         0     480      24
  5        2017-09-07 00:00:00           0         0       0      25
  :                 :                     :         :       :      :
  :                 :                     :         :       :      :
  29       2017-09-30 00:00:00

它应该看起来像这样:

enter image description here

图片中每个子图的y4,y5 ....是要显示的特定列名,在我的数据框中可以是0.0,1.0 .... 25.0。 x轴刻度标签将是我的数据框df的datetimestamp列。 Y轴是所有列的值范围。

代码如下:

初始化图形

plt.style.use('seaborn-darkgrid')

创建调色板

palette = plt.get_cmap('tab20')

多线图

num=0
for column in df.drop(' DateTimestamp', axis=1):
num+=1

# Find the right spot on the plot
plt.subplot(6,5, num)

# plot every groups, but discreet
for v in df.drop(' DateTimestamp', axis=1):
    plt.plot(df[' DateTimestamp'], df[v], marker='', color='grey', linewidth=0.6, alpha=0.3)

# Plot the lineplot
plt.plot(df[' DateTimestamp'], df[column], marker='', color=palette(num), linewidth=2.4, alpha=0.9, label=column)

# Same limits for everybody!

plt.xlim(0,30)

# the limit of the y-axis should be the max value of all possible column values  

plt.ylim(0,0) 

# Not ticks everywhere

if num in range(7) :
    plt.tick_params(labelbottom='off')
if num not in [1,4,7] :
    plt.tick_params(labelleft='off')

# Add title

 plt.title(column, loc='left', fontsize=12, fontweight=0, color=palette(num) )

通用标题

 plt.suptitle("Line Plot",fontsize=13, fontweight=0, color='black', style='italic', y=1.02)

轴标题

plt.text(0.5, 0.02, 'Time', ha='center', va='center')
plt.text(0.06, 0.5, 'Note', ha='center', va='center', rotation='vertical')

但是,我得到了错误:

Traceback (most recent call last):

  File "C:\Users\ty\AppData\Local\Continuum\Anaconda3\lib\site-packages\IPython\core\formatters.py", line 307, in __call__
return printer(obj)

  File "C:\Users\ty\AppData\Local\Continuum\Anaconda3\lib\site-packages\IPython\core\pylabtools.py", line 240, in <lambda>
png_formatter.for_type(Figure, lambda fig: print_figure(fig, 'png', **kwargs))

  File "C:\Users\ty\AppData\Local\Continuum\Anaconda3\lib\site-packages\IPython\core\pylabtools.py", line 124, in print_figure
fig.canvas.print_figure(bytes_io, **kw)

 File "C:\Users\ty\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\backend_bases.py", line 2212, in print_figure
**kwargs)

 File "C:\Users\ty\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\backends\backend_agg.py", line 513, in print_png
FigureCanvasAgg.draw(self)

  File "C:\Users\ty\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\backends\backend_agg.py", line 433, in draw
self.figure.draw(self.renderer)

  File "C:\Users\ty\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\artist.py", line 55, in draw_wrapper
return draw(artist, renderer, *args, **kwargs)

  File "C:\Users\ty\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\figure.py", line 1475, in draw
renderer, self, artists, self.suppressComposite)

 File "C:\Users\ty\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\image.py", line 141, in _draw_list_compositing_images
a.draw(renderer)

 File "C:\Users\ty\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\artist.py", line 55, in draw_wrapper
return draw(artist, renderer, *args, **kwargs)

 File "C:\Users\ty\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\axes\_base.py", line 2607, in draw
mimage._draw_list_compositing_images(renderer, self, artists)

  File "C:\Users\ty\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\image.py", line 141, in _draw_list_compositing_images
a.draw(renderer)

  File "C:\Users\ty\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\artist.py", line 55, in draw_wrapper
return draw(artist, renderer, *args, **kwargs)

  File "C:\Users\ty\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\axis.py", line 1190, in draw
ticks_to_draw = self._update_ticks(renderer)

  File "C:\Users\ty\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\axis.py", line 1028, in _update_ticks
tick_tups = list(self.iter_ticks())  # iter_ticks calls the locator

  File "C:\Users\ty\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\axis.py", line 971, in iter_ticks
majorLocs = self.major.locator()

  File "C:\Users\ty\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\dates.py", line 1249, in __call__
self.refresh()

  File "C:\Users\ty\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\dates.py", line 1269, in refresh
dmin, dmax = self.viewlim_to_dt()

  File "C:\Users\ty\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\dates.py", line 1026, in viewlim_to_dt
.format(vmin))

ValueError: view limit minimum 0.0 is less than 1 and is an invalid Matplotlib date value. This often happens if you pass a non-datetime value to an axis that has datetime units <Figure size 432x288 with 25 Axes>

0 个答案:

没有答案