前言
本文的文字及圖片來源于網路,僅供學習、交流使用,不具有任何商業用途,著作權歸原作者所有,如有問題請及時聯系我們以作處理,
資料準備
今天我們就用一組實戰資料來畫出上圖,資料集是一份拉面資料集,沒錯,就是下面的拉面,
資料來源https://www.theramenrater.com/(拉面愛好者)的評論,資料集預覽如下,該資料集可以來分析各個國家的拉面店評分以及風格等,
本案例需要分析拉面品牌數量前十的國家(或地區)的拉面店平均評分星級,為了達到上述分析目的,我們需要對資料進行簡單的處理:
- 讀取資料后,將Stars列中評分為Unrated的替換為3分
- 按照國家進行統計,求出評分個數,以及均值
- 降序,選出Top 10
file = 'ramen-ratings.csv' df = pd.read_csv(file) df['Stars'].replace({'Unrated': 3}, inplace=True) df['Stars'] = pd.to_numeric(df['Stars']) print(df.info()) # get top 10 df_stars = df.groupby(by='Country').agg({'Stars': ['count', 'mean']}) df_stars.sort_values(by=('Stars', 'count'), ascending=False, inplace=True) print(df_stars.head(10)) top_10 = df_stars.iloc[0:10, :]
最后我們的資料預覽如下:
繪制組合圖Combo Chart
上面的組合圖包含柱狀圖和曲線圖, 采用barplot 和lineplot可以輕易分別畫出,
關鍵問題是如何進行組合,這里有個小技巧:所謂組合,其實是障眼法,只不過是兩幅圖的x軸重疊罷了,在matplotlib里面,可以采用twinx來共享x軸,y軸的次坐標與主坐標分布兩側,
所以知道上述技巧后,代碼的撰寫就是輕而易舉的事情,
# standard plot fig, ax1 = plt.subplots(figsize=(10, 6)) sns.barplot(data=top_10, x=top_10.index, y=('Stars', 'count'), ax=ax1) ax1.set_xlabel('Country/Area') ax1.set_ylabel('Count') ax1.set_ylim([0, 400]) ax2 = ax1.twinx() # share the x axis print(top_10[('Stars', 'mean')]) sns.lineplot(data=top_10, x=top_10.index, y=top_10[( 'Stars', 'mean')], marker="*", color='k', markersize=12) ax2.set_ylabel('Rate') ax2.set_ylim([0, 5]) ax1.set_title('Ramen Quantities & Ratings in Areas') plt.tight_layout() plt.show()
自定義星級Ticks
上面的標準組合圖中右側的次坐標Ticks 默認為數字,分別表示0-5個星級評分,我們可以自定義Ticks 讓其顯示更加友善----直接替換為★級個數,比如★★★★★ (五星),
兩個問題擺在我們面前:
- ★ 怎么畫?
- ★怎么替換Ticks 標簽?
答案很簡單,matplotlib都考慮到了,
數學里面包含大量的特殊符號,比如≥,⊙,?,?等你想的到想不到的符號,都在TeX符號集中包含,像★ 就可以用‘$\bigstar$’來表達,
怎么替換Ticks 標簽?當然是用函式了,我們寫一個函式,將數字替換為★級個數,然后用yaxis.set_major_formatter呼叫該函式即可,
def stars(x,pos): return r'$\bigstar$' * int(x) ax2.yaxis.set_major_formatter(FuncFormatter(stars))
這樣,右側次坐標的Ticks 換成了星級★符號,
總結
本文展示了matplotlib 的一些畫圖小技巧,并且在拉面資料集上進行了展示:
- 通過共享x軸,實作柱狀圖和曲線圖的組合繪制,類似Excel組合圖
- 通過LaTex符號以及自定義Ticks ,將Ticks 替換為星級★符號,更加美觀
以下文章來源于Python小例子,作者 無塵
轉載地址
https://blog.csdn.net/fei347795790?t=1
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/139166.html
標籤:其他
上一篇:Java 轉換 PDF 版本
下一篇:微型斷路器的選擇使用
