python-3.x - ValueError: view limit minimum 0.0 小于 1 并且是无效的 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
它应该是这样的:
图片中每个子图顶部的 y4、y5 .... 是正在显示的特定列名,在我的数据框中可以是 0.0、1.0....25.0。x 轴刻度标签将是我的数据框 df 的日期时间戳列。Y 轴是所有列的值的范围。这是代码:#初始化图形
plt.style.use('seaborn-darkgrid')
#create a color palette
palette = plt.get_cmap('tab20')
#multiple line plot
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)
plt.ylim(0,0) # the limit of the y-axis should be the max value of all possible column values
# 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) )
#general title
plt.suptitle("Line Plot",fontsize=13, fontweight=0, color='black', style='italic', y=1.02)
#Axis title
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>
解决方案
推荐阅读
- sql - SQL 获取最近的日期
- html - 打印网页时格式化错误
- excel - 计算excel vba中命名范围的数量
- python - 使用 POST 时 Python 在正文和参数中发送 XML 时遇到问题
- vue.js - 对于选项卡中的每个 TabStripItem,我希望宽度由标签中文本的长度定义
- google-cloud-platform - 如何在 Dialogflow 中切换语言?
- javascript - Primefaces 通过 javaScript 调用 p:ConfirmDialog
- c++ - 分段错误(核心转储) - 不知道为什么
- git - 如何使用 Rust git2 crate 执行“git pull”?
- c++ - 调试断言失败:is_block_type_valid(header->_block_use) 复制 ABC 的引用