【问题标题】:Making Fill Plot Matplotlib - Error: invalid type promotion制作填充图 Matplotlib - 错误:无效的类型提升
【发布时间】:2016-03-20 18:14:21
【问题描述】:

我正在尝试使用下面的代码在 Python(我正在使用 spyder IDE)中使用 Matplotlib 创建填充图。但是,我收到了代码底部发布的错误。我要绘制的数据框包含沿 x 轴的日期,然后是一系列 y 值(我创建了示例数据框以查看是否重现了错误,以防我的数据框出现问题)。

这似乎让我很困惑,我正试图从头开始(并访问了 matplotlib 网站,该网站发布在代码中的 cmets 中)。

我对 Python 和 Matplotlib 非常陌生,也许我只是缺少一些基本的东西。我需要为我正在执行的工作添加很多带有日期时间 x 轴的图,所以如果我应该注意任何其他功能,请告诉我,我们将不胜感激!

提前致谢!

import pandas as pd
import numpy as np
import datetime as dt
import matplotlib.pyplot as plt

data1 = [{'a':dt.datetime(2015,1,1,12,0,0), 'b':1},{'a':dt.datetime(2015,1,1,13,0,0), 'b':2},{'a':dt.datetime(2015,1,1,14,0,0), 'b':3}]
df1 = pd.DataFrame(data1)

data2 = [{'a':dt.datetime(2015,1,1,12,0,0), 'c':9},{'a':dt.datetime(2015,1,1,13,0,0), 'c':8},{'a':dt.datetime(2015,1,1,14,0,0), 'c':7}]
df2 = pd.DataFrame(data2)

df3 = pd.merge(df1, df2, how = 'left', on = 'a')

plt.fill(df3['a'], df3['c'])
plt.show()

"""
used this example code from Fill Demo on page http://matplotlib.org/users/screenshots.html
import numpy as np
import matplotlib.pyplot as plt


x = np.linspace(0, 1)
y = np.sin(4 * np.pi * x) * np.exp(-5 * x)

plt.fill(x, y, 'r')
plt.grid(True)
plt.show()
"""

  File "/Applications/anaconda/lib/python3.5/site-packages/numpy/core/shape_base.py", line 280, in hstack
    return _nx.concatenate(arrs, 1)

TypeError: invalid type promotion

【问题讨论】:

  • 为我工作。你用的是什么版本的 pandas、matplolib、nad NumPy?
  • 熊猫 0.17.1、Matplotlib 1.5.0 和 Numpy 1.10.1

标签: python matplotlib spyder


【解决方案1】:

直接使用值而不是系列:

plt.fill(df3['a'].values, df3['c'].values

你更可能想要这种类型的情节:

plt.fill_between(df3['a'].values, df3['c'].values)

【讨论】:

  • 有效!我不想包含“c”值,因为我只是合并数据框以包含单列。我能够让它工作的唯一方法是 pd.merge 和 on ='a' 因为列名必须相同。否则时间列也会被带过来。有没有办法 pd.merge 并按名称指定列,然后只合并那些特定的列(当列名不同时)?如果需要,我可以提出一个新问题...
  • @Prevost 最好提出一个新问题并提供示例数据以及您的解释。
  • 绘制系列值是否会消除我根据特定时间范围格式化 x 轴的能力?这个例子很小,但是当我有跨越多天的数据时,我可以使用日期时间格式设置 x 轴跨度吗?我正在从 Excel 迁移,所以我认为它们已被转换为文本值...
  • 没有。 values 是一个带有日期时间条目的 NumPy 数组。
猜你喜欢
  • 1970-01-01
  • 2018-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-30
  • 2021-06-29
  • 1970-01-01
  • 2013-01-25
相关资源
最近更新 更多