首頁 > 軟體

Python利用matplotlib畫出漂亮的分析圖表

2022-07-04 18:00:44

前言

作為一名優秀的分析師,還是得學會一些讓圖表漂亮的技巧,這樣子拿出去才更加有面子哈哈。好了,今天的錦囊就是介紹一下各種常見的圖表,可以怎麼來畫吧。

資料集引入

首先引入資料集,我們還用一樣的資料集吧,分別是 Salary_Ranges_by_Job_Classification以及 GlobalLandTemperaturesByCity。(具體資料集可以後臺回覆 plot獲取)

# 匯入一些常用包
import pandas as pd
import numpy as np
import seaborn as sns

%matplotlib inline
import matplotlib.pyplot as plt
import matplotlib as mpl
plt.style.use('fivethirtyeight')

#解決中文顯示問題,Mac
from matplotlib.font_manager import FontProperties

# 檢視本機plt的有效style
print(plt.style.available)
# 根據本機available的style,選擇其中一個,因為之前知道ggplot很好看,所以我選擇了它
mpl.style.use(['ggplot'])

# ['_classic_test', 'bmh', 'classic', 'dark_background', 'fast', 'fivethirtyeight', 'ggplot', 'grayscale', 'seaborn-bright', 'seaborn-colorblind', 'seaborn-dark-palette', 'seaborn-dark', 'seaborn-darkgrid', 'seaborn-deep', 'seaborn-muted', 'seaborn-notebook', 'seaborn-paper', 'seaborn-pastel', 'seaborn-poster', 'seaborn-talk', 'seaborn-ticks', 'seaborn-white', 'seaborn-whitegrid', 'seaborn', 'Solarize_Light2']

# 資料集匯入

# 引入第 1 個資料集 Salary_Ranges_by_Job_Classification
salary_ranges = pd.read_csv('./data/Salary_Ranges_by_Job_Classification.csv')

# 引入第 2 個資料集 GlobalLandTemperaturesByCity
climate = pd.read_csv('./data/GlobalLandTemperaturesByCity.csv')
# 移除缺失值
climate.dropna(axis=0, inplace=True)
# 只看中國
# 日期轉換, 將dt 轉換為日期,取年份, 注意map的用法
climate['dt'] = pd.to_datetime(climate['dt'])
climate['year'] = climate['dt'].map(lambda value: value.year)
climate_sub_china = climate.loc[climate['Country'] == 'China']
climate_sub_china['Century'] = climate_sub_china['year'].map(lambda x:int(x/100 +1))
climate.head()

折線圖

折線圖是比較簡單的圖表了,也沒有什麼好優化的,顏色看起來順眼就好了。下面是從網上找到了顏色表,可以從中挑選~

# 選擇上海部分天氣資料
df1 = climate.loc[(climate['Country']=='China')&(climate['City']=='Shanghai')&(climate['dt']>='2010-01-01')]
.loc[:,['dt','AverageTemperature']]
.set_index('dt')
df1.head()

# 折線圖
df1.plot(colors=['lime'])
plt.title('AverageTemperature Of ShangHai')
plt.ylabel('Number of immigrants')
plt.xlabel('Years')
plt.show()

上面這是單條折線圖,多條折線圖也是可以畫的,只需要多增加幾列。

# 多條折線圖
df1 = climate.loc[(climate['Country']=='China')&(climate['City']=='Shanghai')&(climate['dt']>='2010-01-01')]
.loc[:,['dt','AverageTemperature']]
.rename(columns={'AverageTemperature':'SH'})
df2 = climate.loc[(climate['Country']=='China')&(climate['City']=='Tianjin')&(climate['dt']>='2010-01-01')]
.loc[:,['dt','AverageTemperature']]
.rename(columns={'AverageTemperature':'TJ'})
df3 = climate.loc[(climate['Country']=='China')&(climate['City']=='Shenyang')&(climate['dt']>='2010-01-01')]
.loc[:,['dt','AverageTemperature']]
.rename(columns={'AverageTemperature':'SY'})
# 合併
df123 = df1.merge(df2, how='inner', on=['dt'])
.merge(df3, how='inner', on=['dt'])
.set_index(['dt'])
df123.head()

# 多條折線圖
df123.plot()
plt.title('AverageTemperature Of 3 City')
plt.ylabel('Number of immigrants')
plt.xlabel('Years')
plt.show()

餅圖

接下來是畫餅圖,我們可以優化的點多了一些,比如說從餅塊的分離程度,我們先畫一個“低配版”的餅圖。

df1 = salary_ranges.groupby('SetID', axis=0).sum()

 
# 「低配版」餅圖
df1['Step'].plot(kind='pie', figsize=(7,7),
autopct='%1.1f%%',
shadow=True)
plt.axis('equal')
plt.show()

# 「高配版」餅圖
colors = ['lightgreen', 'lightblue'] #控制餅圖顏色 ['lightgreen', 'lightblue', 'pink', 'purple', 'grey', 'gold']
explode=[0, 0.2] #控制餅圖分離狀態,越大越分離

df1['Step'].plot(kind='pie', figsize=(7, 7),
autopct = '%1.1f%%', startangle=90,
shadow=True, labels=None, pctdistance=1.12, colors=colors, explode = explode)
plt.axis('equal')
plt.legend(labels=df1.index, loc='upper right', fontsize=14)
plt.show()

散點圖

散點圖可以優化的地方比較少了,ggplot2的配色都蠻好看的,正所謂style選的好,省很多功夫!

# 選擇上海部分天氣資料
df1 = climate.loc[(climate['Country']=='China')&(climate['City']=='Shanghai')&(climate['dt']>='2010-01-01')]
.loc[:,['dt','AverageTemperature']]
.rename(columns={'AverageTemperature':'SH'})

df2 = climate.loc[(climate['Country']=='China')&(climate['City']=='Shenyang')&(climate['dt']>='2010-01-01')]
.loc[:,['dt','AverageTemperature']]
.rename(columns={'AverageTemperature':'SY'})
# 合併
df12 = df1.merge(df2, how='inner', on=['dt'])
df12.head()

# 散點圖
df12.plot(kind='scatter', x='SH', y='SY', figsize=(10, 6), color='darkred')
plt.title('Average Temperature Between ShangHai - ShenYang')
plt.xlabel('ShangHai')
plt.ylabel('ShenYang')
plt.show()

面積圖

# 多條折線圖
df1 = climate.loc[(climate['Country']=='China')&(climate['City']=='Shanghai')&(climate['dt']>='2010-01-01')]
.loc[:,['dt','AverageTemperature']]
.rename(columns={'AverageTemperature':'SH'})
df2 = climate.loc[(climate['Country']=='China')&(climate['City']=='Tianjin')&(climate['dt']>='2010-01-01')]
.loc[:,['dt','AverageTemperature']]
.rename(columns={'AverageTemperature':'TJ'})
df3 = climate.loc[(climate['Country']=='China')&(climate['City']=='Shenyang')&(climate['dt']>='2010-01-01')]
.loc[:,['dt','AverageTemperature']]
.rename(columns={'AverageTemperature':'SY'})
# 合併
df123 = df1.merge(df2, how='inner', on=['dt'])
.merge(df3, how='inner', on=['dt'])
.set_index(['dt'])
df123.head()

colors = ['red', 'pink', 'blue'] #控制餅圖顏色 ['lightgreen', 'lightblue', 'pink', 'purple', 'grey', 'gold']
df123.plot(kind='area', stacked=False,
figsize=(20, 10), colors=colors)
plt.title('AverageTemperature Of 3 City')
plt.ylabel('AverageTemperature')
plt.xlabel('Years')
plt.show()

直方圖

# 選擇上海部分天氣資料
df = climate.loc[(climate['Country']=='China')&(climate['City']=='Shanghai')&(climate['dt']>='2010-01-01')]
.loc[:,['dt','AverageTemperature']]
.set_index('dt')
df.head()

# 最簡單的直方圖
df['AverageTemperature'].plot(kind='hist', figsize=(8,5), colors=['grey'])
plt.title('ShangHai AverageTemperature Of 2010-2013') # add a title to the histogram
plt.ylabel('Number of month') # add y-label
plt.xlabel('AverageTemperature') # add x-label
plt.show()

條形圖

# 選擇上海部分天氣資料
df = climate.loc[(climate['Country']=='China')&(climate['City']=='Shanghai')&(climate['dt']>='2010-01-01')]
.loc[:,['dt','AverageTemperature']]
.set_index('dt')
df.head()

df.plot(kind='bar', figsize = (10, 6))
plt.xlabel('Month')
plt.ylabel('AverageTemperature')
plt.title('AverageTemperature of shanghai')
plt.show()

df.plot(kind='barh', figsize=(12, 16), color='steelblue')
plt.xlabel('AverageTemperature')
plt.ylabel('Month')
plt.title('AverageTemperature of shanghai')
plt.show()

到此這篇關於Python利用matplotlib畫出漂亮的分析圖表的文章就介紹到這了,更多相關Python 繪製分析圖表內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com