专栏首页SAMshare怎么用matplotlib画出漂亮的分析图表

怎么用matplotlib画出漂亮的分析图表

今日锦囊

特征锦囊:怎么用matplotlib画出漂亮的分析图表

? Index

  • 数据集引入
  • 折线图
  • 饼图
  • 散点图
  • 面积图
  • 直方图
  • 条形图

关于用matplotlib画图,先前的锦囊里有提及到,不过那些图都是比较简陋的(《特征锦囊:常用的统计图在Python里怎么画?》),难登大雅之堂,作为一名优秀的分析师,还是得学会一些让图表漂亮的技巧,这样子拿出去才更加有面子哈哈。好了,今天的锦囊就是介绍一下各种常见的图表,可以怎么来画吧。

? 数据集引入

首先引入数据集,我们还用一样的数据集吧,分别是 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()

今天的内容比较长了,建议收藏起来哦,下次有空的时候可以把它弄进自己的代码库,使用起来更加方便哦~

本文分享自微信公众号 - SAMshare(gh_8528ce7b7e80),作者:flora

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-12-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Jupyter notebook入门教程(下)

    Jupyter notebook的入门教程第二部分的英文原文出处: Getting started with the Jupyter notebook (p...

    红色石头
  • 这个可视化库,有点牛逼...

    好久不见,今天终于可以继续来写数据分析系列的文章了。在之前的文章中,我介绍过matplotlib的简单使用,同时也分享了几篇matplotlib应用实战的文章(...

    Python进击者
  • 不会做图表?10个Python数据可视化库来帮你!

    今天我们会介绍一下10个适用于多个学科的Python数据可视化库,其中有名气很大的也有鲜为人知的。

    小F
  • 盘点12个Python数据可视化库

    大家普遍第一次接触到的Python数据可视化库基本上都是Matplotlib。Python还有很多数据可视化库,本文我将简单介绍12款常用的Python数据可视...

    天道Vax的时间宝藏
  • Python进阶之Matplotlib入门(一)

    Matplotlib是Python的画图领域使用最广泛的绘图库,它能让使用者很轻松地将数据图形化以及利用它可以画出许多高质量的图像,是用Python画图的必备技...

    HuangWeiAI
  • 12个流行的Python数据可视化库总结

    matplotlib是Python数据可视化库的OG。尽管它已有十多年的历史,但仍然是Python社区中使用最广泛的绘图库。它的设计与MATLAB非常相似,MA...

    磐创AI
  • 博客 | 12个流行的Python数据可视化库总结

    matplotlib是Python数据可视化库的OG。尽管它已有十多年的历史,但仍然是Python社区中使用最广泛的绘图库。它的设计与MATLAB非常相似,MA...

    AI研习社
  • 一图入门Matplotlib绘图

    Matplotlib是Python里可视化的基础包,可以很方便地绘制二维,三维的图表,作图风格接近MATLAB,所以称为matplotlib。使用简单的语句就能...

    超哥的杂货铺
  • 数据可视化:用散点图进行数据分析

    导读:散点图的用途有很多,我认为它的核心价值,在于应用相关思维,发现变量之间的关系。

    华章科技
  • 在Python中使用Pygal进行交互可视化

    我们需要处理、分析和探索的大量数据;随着技术的进步,这个数字只会越来越大。现在,想象一下必须盯着电子表格中的数千行数据,试图找到隐藏的模式并追踪数字的变化。这就...

    HuangWeiAI
  • 这么漂亮的图画,竟然是用NumPy画出来的?请跟我来,10行代码玩转NumPy!

    NumPy也可以画图吗?当然!NumPy不仅可以画,还可以画得更好、画得更快!比如下面这幅画,只需要10行代码就可以画出来。若能整明白这10行代码,就意味着叩开...

    数据森麟
  • 基于matplotlib的2D/3D抽象网格和能量曲线绘制程序

    專 欄 ❈PytLab,Python 中文社区专栏作者。主要从事科学计算与高性能计算领域的应用,主要语言为Python,C,C++。熟悉数值算法(最优化方法,蒙...

    Python中文社区
  • 使用 Python 进行数据可视化之Seaborn

    ? 作者主页:海拥 ? 作者简介:?CSDN全栈领域优质创作者、?HDZ核心组成员、?蝉联C站周榜前十 ? 粉丝福利:粉丝群 每周送四本书,每月送各种小礼品(搪...

    海拥
  • python可视化 | 地理桑基图的绘制方法

    我回答目前常用的库包不能直接绘制这样的桑基图,我错了,应该回答是目前常用的库包不能绘制这样漂亮些的桑基图。

    郭好奇同学
  • 基于Python的微信好友分析

    “如果我比别人看得远,那是因为我站在巨人的肩膀上”–不知道牛顿说了没 本文利用Python3的itchat包简单的分析了一下自己的微信好友。

    一点儿也不潇洒
  • 6行python代码的爱心线

    前些日子在做绩效体系的时候,遇到了一件囧事,居然忘记怎样在Excel上拟合正态分布了,尽管在第二天重新拾起了Excel中那几个常见的函数和图像的做法,还是十分的...

    半吊子全栈工匠
  • 基于可视化理论的清晰Python图表

    实际上,本文介绍了能从经典的《定量信息的视觉展示(The Visual Display of Quantitative Information)》(Edward...

    人工智能小咖
  • 科研工具篇 | 我敢打赌,看完之后提高你80%的科研工作效率

    做文献调研是一件相当痛苦的事情,因为既要做到“准”,同时又要做到“全”。在常用的文献数据库中逐个去进行检索显然是一件费力不讨好的事情。google schola...

    谭庆波
  • 怎样绘制漂亮的统计图表|第一期

    大家好,最近分享了一些关于数据分析可视化相关的内容,其实在数据分析过程中,基本就是数据采集与处理,再通过描述性分析来探索数据,最后建模预测,而在数据探索部分这一...

    刘早起

扫码关注云+社区

领取腾讯云代金券