如你所見,為了閱讀我不得不使用matplotlib旋轉x軸標題.從外觀上來看,顯示非常不錯.理想情況下,我想格式化y軸刻度,但是在不引入matplotlib的plt.yticks的情況下,我不知道如果做到這一點.
ggplot
ggplot類似于Seaborn,構建于matplotlib,并且旨在以簡單的方式提高matplotlib可視化的視覺吸引力.和Seaborn不同的是它是R中ggplot2的接口.鑒于這個目標,部分API不是python,但非常強大.我沒有用過R中的ggplot,所以有一個學習曲線.然后我可以開到ggplot的吸引力.此庫正在積極的發展,我希望它繼續發展并成熟起來,因為我認為這可能是一個非常強大的功能.為了弄清楚一些事情我也學習過幾次.在看代碼和做了一些google之后,我能明白大部分.來吧,導入模塊,讀取數據:
import pandas as pd
from ggplot import *
budget = pd.read_csv("mn-budget-detail-2014.csv")
budget = budget.sort('amount',ascending=False)[:>10]
現在我們通過串聯一些ggplot命令創建我們的圖表:
p = ggplot(budget, aes(x="detail",y="amount")) + \
geom_bar(stat="bar", labels=budget["detail"].tolist()) +\
ggtitle("MN Capital Budget - 2014") + \
xlab("Spending Detail") + \
ylab("Amount") + scale_y_continuous(labels='millions') + \
theme(axis_text_x=element_text(angle=>90))
print p
這似乎有些奇怪,尤其適用print p來展示圖表.然而,弄清楚這點比較簡單.在進一步深入后,了解如何旋轉文本90度以及如何排序x軸標簽.我發現最棒的功能是 scale_y_continous,使得標簽好看很多.如果你想保存圖片,使用ggsave :
ggsave(p, "mn-budget-capital-ggplot.png")
這是最終圖像.我知道有很多灰階.我可以上色,但是沒有時間.
Bokeh
Bokeh和之前3個庫都不一樣,不依賴與matplotlib,并且面向現代網頁瀏覽器生成可視化.它的目的是讓交互式網頁可視化,所以我的例子非常簡單.導入模塊,讀取數據:
import pandas as pd
from bokeh.charts import Bar
budget = pd.read_csv("mn-budget-detail-2014.csv")
budget = budget.sort('amount',ascending=False)[:>10]
Bokeh一個不同的方面是,我需要明確列出我們想要繪制的值.
details = budget["detail"].values.tolist()
amount = >list(budget["amount"].astype(>float).values)
現在我們可以繪制.這個代碼會讓瀏覽器展示包含圖表的HTML網頁.如果有其他用途,我可以保存為png副本.
bar = Bar(amount, details, filename="bar.html")
bar.title("MN Capital Budget - 2014").xlabel("Detail").ylabel("Amount")
bar.show()
這是png圖片:
正如你所看到的,圖片非常干凈.我沒有找到更簡單的方法,更容易的格式化y軸.Bokeh有去許多功能但是我沒有在這個例子中深入.
Pygal
Pygal用于創建svg圖表.如果安裝了正確依賴,同樣可以保存為png文件.對于易制作交互式圖標svg文件是相當有用的.我同樣發現創建獨特外觀和視覺吸引力的圖標非常容易.和之前一樣,導入模塊,并讀取數據:
import pandas as pd
import pygal
from pygal.style import LightStyle
budget = pd.read_csv("mn-budget-detail-2014.csv")
budget = budget.sort('amount',ascending=False)[:>10]
我們需要創建圖標類型和設置一些基本屬性:
bar_chart = pygal.Bar(style=LightStyle, width=>800, height=>600,
legend_at_bottom=True, human_readable=True,
title='MN Capital Budget - 2014')
值得注意的一點是human_readable,對于格式化數據做的非常好.現在我們需要加入數據到圖表中.這里和pandas整合不那么緊密,但是我發現直接處理這個小數據集.當有大量的行,性能可能是一個問題.
for index, row >in budget.iterrows():
bar_chart.add(row["detail"], row["amount"])、
現在渲染文件為svg 和png文件:
bar_chart.render_to_file('budget.svg')
bar_chart.render_to_png('budget.png')
我認為svg表現非常好,我喜歡結果圖具有獨特,賞心悅目的風格.我同樣發現很容易弄清楚可以做什么,不可以做什么.我鼓勵你下載svg文件,看看在你瀏覽器中圖片的互動性.
Plot.ly
Plot.ly以分析和可視化的在線工具來區分的.有強大的API并且包含python的.瀏覽網站,你可以發現有非常豐富,交互式的圖片.得益于優秀的文檔,創建條形圖相當簡單.你需要遵循文檔,獲取你API 密鑰設置.一旦你這樣做,所有工作看上去相當完美.一個需要注意的是,你所做的一切都在網上發布,因此確保你對這點感到OK.有一個選項可以讓圖表私有,所以你需要設置.Plot.ly和pandas無縫整合.設置導入模塊,讀取數據:
import plotly.plotly as py
import pandas as pd
from plotly.graph_objs import *
budget=pd.read_csv(“mn-budget-detail-2014.csv”)
budget.sort(‘amount’,ascending=False,inplace=True)
budget = budget[:>10]
設置數據和圖表類型.
data = Data([
Bar(
x=budget["detail"],
y=budget["amount"]
)
])
我還決定添加一些額外布局信息.
layout = Layout(
title='2014 MN Capital Budget',
font=Font(
family='Raleway, sans-serif'
),
showlegend=False,
xaxis=XAxis(
tickangle=->45
),
bargap=>0.05
)
最后,繪制數據.這將打開一個瀏覽器,帶有你完成的繪圖.你可以使用 py.image.save_as保存本例副本.這是個很cool的功能.你得到豐富的基于網絡報告的交互,和保存本地副本用于嵌入文件的能力.
fig = Figure(data=data, layout=layout)
plot_url = py.plot(data,filename='MN Capital Budget - 2014')
py.image.save_as(fig, 'mn-14-budget.png')
檢查全交互式版本.你可以看到很多很棒的例子.箱圖很吸引人并具有高度交互性.因為文檔和pythonAPI,運行非常簡單,我喜歡最終產品.
總結
在python生態環境中繪制數據有兩面性.好的方面是有很多選擇.壞的方面是有很多選擇.嘗試弄清楚那個適合你,取決于你需要完成什么.在某種程度上,你需要弄清楚用的工具能不能工作.我沒有看到明顯贏家和輸家.下面是我一些想法:
pandas非常方便,但你必須愿意學習matplotlib定制。
Seaborn可以支持一些更復雜的可視化的方法,但仍需要matplotlib知識來調整。顏色方案是不錯。
ggplot有很多的承諾,但經過陣痛仍在繼續。
Bokeh 是一個強大的工具,如果你想建立自己的可視化服務器,但可能在簡單場景有些大材小用。
pygal由于能夠產生互動的SVG圖形和PNG文件是獨一無二的。它并不像基于matplotlib方案靈活。
Plotly產生互動性最強的圖形。您可以離線保存,并創建非常豐富的基于網絡的可視化效果。
目前的情況是,我會繼續觀看ggplot圖像的進步和使用pygal,在需要交互性的時候使用plotly。隨意在評論中提供反饋。我相信,人們將有很多關于這一主題的問題和意見。如果我錯過了什么或者有其他的選擇了,讓我知道。
評論
查看更多