前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

作者: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=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=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=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=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=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=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=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')

Matplotlib 的正确使用方法,画一张好看的图的更多相关文章

  1. MATLAB 出一张好看的图

    1.坐标轴的视点(viewpoint):从哪个方向看整个坐标系统,这决定了坐标轴的方向和位置,通过view函数实现视点的设置:view([z y ]):(将坐标系统想象为一座房子,而自己是个会飞的天使 ...

  2. 简单而粗暴的方法画任意阶数Bezier曲线

    简单而粗暴的方法画任意阶数Bezier曲线 虽然说是任意阶数,但是嘞,算法原理是可以到任意阶数,计算机大概到100多阶就会溢出了 Bezier曲线介绍] [本文代码] 背景 在windows的Open ...

  3. thinkphp3.2 cli模式的正确使用方法

    最近要使用thinkphp3.2版本的cli模式,手动执的话没有问题,比如php /www/index.php home/article/get 这样没有问题,但是一般用cli模式都是定时任务比较多, ...

  4. Linux重启inotify配置max_user_watches无效被恢复默认值8192的正确修改方法

    Linux下Rsync+inotify-tools实现数据实时同步中有一个重要的配置就是设置Inotify的max_user_watches值,如果不设置,当遇到大量文件的时候就会出现出错的情况. 一 ...

  5. MyEclipse10的正确破解方法

    无法转载,故给出原文链接,以供需要者. MyEclipse10的正确破解方法

  6. Matplotlib学习---用seaborn画直方图,核密度图(histogram, kdeplot)

    由于直方图受组距(bin size)影响很大,设置不同的组距可能会产生完全不同的可视化结果.因此我们可以用密度平滑估计来更好地反映数据的真实特征.具体可参见这篇文章:https://blog.csdn ...

  7. [转]MySQL忘记密码的正确解决方法

    http://database.51cto.com/art/201005/201986.htm 以下的文章主要介绍的是MySQL忘记密码的正确解决方法,在实际操作中如果你忘记MySQL密码是一件很头痛 ...

  8. webpack快速入门——实战技巧:watch的正确使用方法,webpack自动打包

    随着项目大了,后端与前端联调,我们不需要每一次都去打包,这样特别麻烦,我们希望的场景是,每次按保存键,webpack自动为我们打包,这个工具就是watch! 因为watch是webpack自带的插件, ...

  9. .Net core 下的ConfigurationManager类正确引用方法

    大家在项目中经常会用到需要引用配置文件的情况,这也是我偶然间遇到的问题,菜鸟一枚,如有需纠正多谢指点. 正题 在不先引用using的情况下直接写 ConfigurationManager.AppSet ...

随机推荐

  1. flask之Flask、config配置

    flask_config.py ''' flask的配置: 1.flask项目初始化配置: (1)app=Flask(__name__)#初始化声明falsk项目为当前py文件,app应用变量名可以更 ...

  2. InnoDB存储引擎的高级特性大盘点

    InnoDB作为mysql数据库最常用的存储引擎,自然包含了其独有的很多特性.如相比于memory.MyISAM引擎,InnoDB支持行级锁.事务等都是比较重要的特性. 本文将盘点下InnoDB处理事 ...

  3. 排序算法的总结——Java实现

    前言 简单归纳一下最近学习的排序算法,如果有什么错误的地方还请大家指教. 本文介绍了七种经典排序算法,包括冒泡排序,选择排序,插入排序,希尔排序,归并排序,快速排序以及堆排序,并且讨论了各种算法的进一 ...

  4. poj2391 最大流+拆点+二分答案+Floyd

    Ombrophobic Bovines Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 19553   Accepted: 4 ...

  5. 【Java_SSM】(一)maven环境变量的配置

    这篇博文我们介绍一下配置一下maven环境变量的配置. 准备工作 在eclipse配置maven之前需要我们做好准备工作,如下: 1. 安装jdk 2. 已下载好 maven,将maven配置成功 , ...

  6. ShoneSharp语言(S#)的设计和使用介绍系列(9)— 一等公民“函数“爱炫巧

    ShoneSharp语言(S#)的设计和使用介绍 系列(9)— 一等公民“函数“爱炫巧 作者:Shone 声明:原创文章欢迎转载,但请注明出处,https://www.cnblogs.com/Shon ...

  7. Istio的流量管理(实操二)(istio 系列四)

    Istio的流量管理(实操二)(istio 系列四) 涵盖官方文档Traffic Management章节中的inrgess部分. 目录 Istio的流量管理(实操二)(istio 系列四) Ingr ...

  8. javascript图片加载完成前显示loading图片

    <html> <title>图片预加载</title> <body> <script> //判断浏览器 var Browser=new Ob ...

  9. json和数组

    接触数组: 1.数组的定义方法    var arr = [1,2,3,4,5];    var arr = new array();此处括号内可以填写数组的元素,或者直接填写元素的个数.2.数组中各 ...

  10. 在树莓派里搭建 Lighttpd 服务器

    Lighttpd 像 Ngnix 一样,是被设计运行在低内存,低 CPU 负载的设备上,它们都非常适合在树莓派上运行. 本文将介绍如何在树莓派上运行基本配置的 Lighttpd ,以及如何与 PHP- ...