數據可視化我為什麼不用excel,利用python做一個簡單的柱形圖

數據可視化的一個重要方法就是柱形圖,在excel中的柱形圖是非常簡單的,給一組數據就可以做出一個簡單的柱形圖,但是不知道你是不是和我一樣,每次想做一個漂亮的圖的時候總是被excel所限制,比如,橫座標軸顯示不完整,線型沒辦法選擇,字號,透明度,柱形圖的寬度等,今天我們利用matplotlib就可以做出一個簡單的柱形圖

本文編程語言:python

IDE:Jupyter notebook

所需庫:pandas、numpy、matplotlib、seaborn

想要實際操作你還需要點pandas的基礎知識

實例:

導入需要的庫:

import pandas as pd
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
import warnings; warnings.filterwarnings(action='once')
import tkinter as tk
from tkinter import filedialog
from tkinter.filedialog import askdirectory
import datetime as dt
%matplotlib inline
plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文標籤

導入處理的數據:

hot_dog=pd.read_csv(r"http://datasets.flowingdata.com/hot-dog-contest-winners.csv")
hot_dog
數據可視化我為什麼不用excel,利用python做一個簡單的柱形圖

採用最普通的畫法,畫一個簡單的柱形圖:

plt.figure(figsize=(15,7))
plt.bar(hot_dog["Year"],hot_dog["Dogs eaten"])
數據可視化我為什麼不用excel,利用python做一個簡單的柱形圖

這樣優點太過單調了,我們稍微美化一下:

plt.figure(figsize=(25,9))
plt.bar(hot_dog["Year"],hot_dog["Dogs eaten"],label="熱狗數量")
plt.ylabel('被吃掉的熱狗數量',fontsize=17)
plt.xlabel('時間',fontsize=17)
plt.xticks(hot_dog["Year"],fontsize=15,color="k",alpha=.8)
plt.title("變化每年被吃掉的熱狗數量變化圖",bbox=dict(facecolor='gold', edgecolor='blue', alpha=0.1),fontsize=23)
plt.grid(color='g', linestyle='-', linewidth=1,alpha=.2)
plt.legend(loc="upper left",fontsize=16)
for a,b in zip(hot_dog["Year"],hot_dog["Dogs eaten"]):
 plt.text(x=a-.25,y=b+1,s=b,color="crimson",fontsize=14)
plt.show
數據可視化我為什麼不用excel,利用python做一個簡單的柱形圖

過程解釋:

創建一個25*9英寸的畫布

plt.figure(figsize=(25,9))

畫柱形圖

plt.bar(hot_dog["Year"],hot_dog["Dogs eaten"],label="熱狗數量")

設置x,y座標軸名稱:

plt.ylabel('被吃掉的熱狗數量',fontsize=17)

plt.xlabel('時間',fontsize=17)

修改x軸的刻度標籤:設置字體顏色,大小透明度

plt.xticks(hot_dog["Year"],fontsize=15,color="k",alpha=.8)

設置標題:大小,顏色,邊框,字號等

plt.title("變化每年被吃掉的熱狗數量變化圖",bbox=dict(facecolor='gold', edgecolor='blue', alpha=0.1),fontsize=23)

設置網格線:可以設置顏色線型,線寬,透明度等

plt.grid(color='g', linestyle='-', linewidth=1,alpha=.2)

設置圖例:loc設置位置

plt.legend(loc="upper left",fontsize=16)

設置數據標籤:利用text,根據座標的位置來標記

for a,b in zip(hot_dog["Year"],hot_dog["Dogs eaten"]):

plt.text(x=a-.25,y=b+1,s=b,color="crimson",fontsize=14)

我還有另外一種更漂亮的畫法:利用vlines

plt.figure(figsize=(25,7))
plt.vlines(x=hot_dog["Year"], ymin=0, ymax=hot_dog["Dogs eaten"], color='firebrick', alpha=0.7, linewidth=3,label="熱狗數量")
plt.scatter(x=hot_dog["Year"], y=hot_dog["Dogs eaten"]+.7, s=60, color="g", alpha=0.5)
plt.ylabel('被吃掉的熱狗數量',fontsize=17)
plt.xlabel('時間',fontsize=17)
plt.xticks(hot_dog["Year"],fontsize=15,color="r",alpha=.73)
plt.title("變化每年被吃掉的熱狗數量變化圖",bbox=dict(facecolor='gold', edgecolor='blue', alpha=0.1),fontsize=23)
plt.grid(color='g', linestyle='-', linewidth=1,alpha=.2)
plt.legend(loc="upper left",fontsize=16)
for a,b in zip(hot_dog["Year"],hot_dog["Dogs eaten"]):
 plt.text(x=a-.25,y=b+2,s=b,color="crimson",fontsize=14) 
plt.show
數據可視化我為什麼不用excel,利用python做一個簡單的柱形圖

是不是很簡單:

matplotlib中的柱形圖參數詳解:

普通畫法:matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)[source]

x:標量序列

height:柱形的高度

width=0.8:柱形的寬度,可選參數,默認為0.8

bottom:標量或類似數組,可選,條形基座的y座標(默認值:0),默認我們不設置,如果是疊加的柱形圖,需要重新設置

align:{'center','edge'},可選,默認:'center' 條形對齊x座標:

  • 'center':將基準置於x位置的中心位置。
  • 'edge':將條的左邊緣與x位置對齊。

其他參數:

color : 標量或類似數組,可選,顏色

edgecolor:標量或類似數組,可選,條形圖邊框的顏色

linewidth:標量或類似數組,可選,條形邊緣的寬度。 如果為0,則不繪製邊。

tick_label:字符串或類似數組,可選,刻度標籤。 默認值:無(使用默認數字標籤。)

數據可視化我為什麼不用excel,利用python做一個簡單的柱形圖

可選參數color,edgecolor,linewidth,xerr和yerr可以是標量或長度等於條數的序列。 這使您可以使用條形作為堆積條形圖或燭臺圖的基礎。 細節:xerr和yerr直接傳遞給errorbar(),因此它們也可以具有形狀2xN,用於獨立指定低位和高位錯誤。


分享到:


相關文章: