2015-12-15 76 views
2

我想創建一個使用Matplotlib在Python(我使用spyder IDE)使用下面的代碼的填充圖。但是,我收到了代碼底部發布的錯誤。我想繪製的數據框包含沿x軸的日期,然後是一系列的y值(我創建了示例數據框以查看錯誤是否被再現,以防數據框出現問題)。填寫繪製Matplotlib - 錯誤:無效的類型提升

這似乎在阻礙我很多,我試圖從頭開始(並參觀了matplotlib網站,該網站發佈在代碼中的註釋中)。

我對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 
+1

爲我工作。您使用的是什麼版本的熊貓,matplolib,nad NumPy? –

+0

熊貓0.17.1,Matplotlib 1.5.0和Numpy 1.10.1 – Prevost

回答

1

只需使用的值,而不是直接的系列:

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

你更有可能想要這種類型的圖:

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

作品!我不想包含'c'值,因爲我只是合併數據框以包含單列。我能夠得到它的唯一方法是使用on ='a'的pd.merge,因爲列名必須相同。否則時間欄也會被帶過來。有沒有辦法通過名稱pd.merge並指定列,然後合併這些特定列(列名不同時)?如果需要,我可以提出一個新問題... – Prevost

+0

@Prevost最好提出一個新問題,並提供示例數據和解釋。 –

+0

繪製Series值是否會消除我基於特定時間範圍格式化x軸的能力?這個例子很小,但是當我有跨越多天的數據時,我能夠使用日期時間格式設置x軸跨度?我正在從Excel遷移,因此我認爲它們已被轉換爲文本值... – Prevost