2017-05-25 91 views
1

有誰知道如何將matplotlib繪圖轉換爲熊貓數據框(無論是PNG還是JPG),而無需先將圖形保存到文件中。此處用於SQL Server 2017的代碼使用pandas和pickle輸出varbinary(max)https://docs.microsoft.com/en-us/sql/advanced-analytics/tutorials/sqldev-py3-explore-and-visualize-the-data,但它不會被SSRS識別爲有效的PNG(或JPG)圖形。我們的目標是通過SQL中的sp_execute_external_script和varbinary(max)輸出,將Python圖形導入SSRS,就像我們通過SQL中的sp_execute_external_script爲R圖形執行操作一樣。Python - 將matplotlib繪圖轉換爲熊貓數據框

+0

如果你已經從你的sql的圖像獲得字節流,也許你只需要提供瀏覽器的頭信息? –

+0

Milo - 謝謝 - 但所有信息都必須在字節流中熊貓dataframe/varbinary(max) - 這是SSRS在爲圖形調用存儲過程時的工作方式 –

+0

是的抱歉,我沒有想到它是那麼簡單。我不太瞭解這些系統之間的轉換。如果你想出來,發佈答案,我會積極學習更多關於它們的知識。 –

回答

0

問題的核心與pandas數據框本身無關 - 數據框只是此處酸洗對象的容器。

代替酸洗的身影,我的猜測是,你應該保存這個數字到一個Python類文件對象一樣io.StringIO (Python 3)Stringio (python 2)

import matplotlib 
matplotlib.use("Agg") 
import matplotlib.pyplot as plt 
import pandas as pd 
import pickle 

fig_handle = plt.figure() 
plt.hist(InputDataSet.tipped) 
plt.xlabel("Tipped") 
plt.ylabel("Counts") 
plt.title("Histogram, Tipped") 

output_PNG = io.StringIO() 
fig_handle.savefig(output_PNG) 

OutputDataSet = output_PNG 

如果PNG必須包含在一個pandas數據幀,可以是做太多,但我不知道這一數據將多大意義...:

plot0 = pd.DataFrame(data =[output_PNG], columns =["plot"]) 
OutputDataSet = plot0 

每當你現在回到OutputDataSetvarbinary(max),我的猜測是內容將完全日e PNG文件。

好奇聽到,如果這個工程!

+0

不幸的是,fig_handle.savefig(output_PNG)給出了一個錯誤:字符串參數期望得到字節數 - 我遇到這個錯誤時我正在試驗 - 現在,如果我們可以解決這個問題,那將是完美的 - 我沒有足夠的Python知識來了解修復 - 很多感謝嘗試 –

+0

,所以我嘗試了BytesIO - 但仍然沒有將轉換爲數據幀的樂趣正確的格式 –