前言
本文的文字及圖片來源于網路,僅供學習、交流使用,不具有任何商業用途,著作權歸原作者所有,如有問題請及時聯系我們以作處理,
作者:Python中文社區

本文用的資料如圖所示,Dataframe中顯示的是相關職位對應的地區和相應的薪水狀況,單位是千,要統計各個城市的薪資狀況,
最終目的是用Matplotlib結合Seaborn得到這種可視化效果
首先,匯入要用到的包,由于需要在圖中顯示中文字,還需要進行一些字體的設定,
import matplotlib.pyplot as plt import seaborn as sns %matplotlib inline # 設定中文字體為微軟雅黑 plt.rcParams['font.sans-serif'] = 'SimHei'
先用Seaborn生成一張基礎的柱狀圖,并給圖加上標題,之后圍繞這張圖進行進一步的修改,
fig,ax = plt.subplots(figsize=(9,6)) sns.barplot(x='city',y='salary',data=https://www.cnblogs.com/hhh188764/p/df,ci=95,ax=ax) ax.set_title('各城市薪資水平對比')

可以比較明顯看出橫縱坐標的刻度標簽的字體有點小,同時刻度線顯示起來不好看,所以第一步把刻度標簽的字體放大并去掉刻度線,
由于刻度的設定是tick的屬性,所以用ax.tick_param()進行設定,用引數labelsize指定刻度標簽的大小,將length引數設定刻度線長短,
fig,ax = plt.subplots(figsize=(9,6)) sns.barplot(x='city',y='salary',data=https://www.cnblogs.com/hhh188764/p/df,ci=95,ax=ax) ax.set_title('各城市薪資水平對比') # 字體為16px大小,刻度線長度為0 ax.tick_params(labelsize=16,length=0)
第二步,去掉四邊的邊框(真的不好看),這里有兩種實作方式,
第一種是用上篇文章說過的ax.spines[‘xx’].set_visible(False)分別對top、bottoom、left和right進行設定,
第二種方式,由于這里只有一個Axes且四個邊框都去掉,所以也可以直接使用plt.box(False)
fig,ax = plt.subplots(figsize=(9,6)) sns.barplot(x='city',y='salary',data=https://www.cnblogs.com/hhh188764/p/df,ci=95,ax=ax) ax.set_title('各城市薪資水平對比') # 字體為16px大小,刻度線長度為0 ax.tick_params(labelsize=16,length=0) #法一: ax.spines['left'].set_visible(False) ax.spines['top'].set_visible(False) ax.spines['right'].set_visible(False) ax.spines['bottom'].set_visible(False) #法二 plt.box(False)
接下來,為了使條形圖呈從小到大漸變的效果,可以指定各個城市的排列順序,并設定相應的顏色映射,
對各個城市的薪水求均值并從小到大排序,獲取城市排序串列city_order
city_order = df.groupby("city")["salary"].mean()\ .sort_values()\ .index.tolist()
然后用Seaborn中的order和palette分別設定排列順序和顏色,
fig,ax = plt.subplots(figsize=(9,6)) sns.barplot(x='city',y='salary',data=https://www.cnblogs.com/hhh188764/p/df,ci=95,ax=ax, order = city_order,palette = "RdBu_r") ax.set_title('各城市薪資水平對比') # 字體為16px大小,刻度線長度為0 ax.tick_params(labelsize=16,length=0) plt.box(False)

緊接著在y軸上添加網格線便于觀察每個柱子的數值大小,因為是在y軸上,網格線為grid,所以用ax.yaxis.grid()進行設定
fig,ax = plt.subplots(figsize=(9,6)) sns.barplot(x='city',y='salary',data=https://www.cnblogs.com/hhh188764/p/df,ci=95,ax=ax, order = city_order,palette = "RdBu_r") ax.set_title('各城市薪資水平對比') # 字體為16px大小,刻度線長度為0 ax.tick_params(labelsize=16,length=0) plt.box(False) # 設定y軸網格線 ax.yaxis.grid(linewidth=0.5,color='black') # 將網格線置于底層 ax.set_axisbelow(True)
由于x軸和y軸含義比較清晰,所以可以將橫縱坐標的標簽去掉,同時,為了更直觀,可以將y軸的刻度標簽由20,15…換成20k,15k…
這個程序分別用到ax.set_xlabel(),ax.set_ylabel()和ax.set_yticklabels()
fig,ax = plt.subplots(figsize=(9,6)) sns.barplot(x='city',y='salary',data=https://www.cnblogs.com/hhh188764/p/df,ci=95,ax=ax, order = city_order,palette = "RdBu_r") ax.set_title('各城市薪資水平對比') # 字體為16px大小,刻度線長度為0 ax.tick_params(labelsize=16,length=0) plt.box(False) # 設定y軸網格線 ax.yaxis.grid(linewidth=0.5,color='black') # 將網格線置于底層, ax.set_axisbelow(True) ax.set_xlabel('') ax.set_ylabel('') # 將0處設為空字串,其他地方加上k ax.set_yticklabels([" ","5k","10k","15k","20k"])
最后對標題進行設定,讓標題更加好看,這一步主要是對ax.set_title()中的引數進行調整,主要包括
backgroundcolor:控制背景顏色 fontsize:控制字體大小 weight:控制字體粗細 color:控制字體顏色 fig,ax = plt.subplots(figsize=(9,6)) sns.barplot(x='city',y='salary',data=https://www.cnblogs.com/hhh188764/p/df,ci=95,ax=ax, order = city_order,palette = "RdBu_r") # 字體為16px大小,刻度線長度為0 ax.tick_params(labelsize=16,length=0) plt.box(False) # 設定y軸網格線 ax.yaxis.grid(linewidth=0.5,color='black') # 將網格線置于底層, ax.set_axisbelow(True) ax.set_xlabel('') ax.set_ylabel('') # 將0處設為空字串,其他地方加上k ax.set_yticklabels([" ","5k","10k","15k","20k"]) ax.set_title(' 各城市薪資水平對比 ',backgroundcolor='#3c7f99', fontsize=24, weight='bold',color='white')

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/137692.html
標籤:Python
上一篇:往excel中插入分組柱狀圖
下一篇:PIL 字體居中顯示
