Matplotlib 的正确使用方法,画一张好看的图
前言
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
作者: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 的正确使用方法,画一张好看的图的更多相关文章
- MATLAB 出一张好看的图
1.坐标轴的视点(viewpoint):从哪个方向看整个坐标系统,这决定了坐标轴的方向和位置,通过view函数实现视点的设置:view([z y ]):(将坐标系统想象为一座房子,而自己是个会飞的天使 ...
- 简单而粗暴的方法画任意阶数Bezier曲线
简单而粗暴的方法画任意阶数Bezier曲线 虽然说是任意阶数,但是嘞,算法原理是可以到任意阶数,计算机大概到100多阶就会溢出了 Bezier曲线介绍] [本文代码] 背景 在windows的Open ...
- thinkphp3.2 cli模式的正确使用方法
最近要使用thinkphp3.2版本的cli模式,手动执的话没有问题,比如php /www/index.php home/article/get 这样没有问题,但是一般用cli模式都是定时任务比较多, ...
- Linux重启inotify配置max_user_watches无效被恢复默认值8192的正确修改方法
Linux下Rsync+inotify-tools实现数据实时同步中有一个重要的配置就是设置Inotify的max_user_watches值,如果不设置,当遇到大量文件的时候就会出现出错的情况. 一 ...
- MyEclipse10的正确破解方法
无法转载,故给出原文链接,以供需要者. MyEclipse10的正确破解方法
- Matplotlib学习---用seaborn画直方图,核密度图(histogram, kdeplot)
由于直方图受组距(bin size)影响很大,设置不同的组距可能会产生完全不同的可视化结果.因此我们可以用密度平滑估计来更好地反映数据的真实特征.具体可参见这篇文章:https://blog.csdn ...
- [转]MySQL忘记密码的正确解决方法
http://database.51cto.com/art/201005/201986.htm 以下的文章主要介绍的是MySQL忘记密码的正确解决方法,在实际操作中如果你忘记MySQL密码是一件很头痛 ...
- webpack快速入门——实战技巧:watch的正确使用方法,webpack自动打包
随着项目大了,后端与前端联调,我们不需要每一次都去打包,这样特别麻烦,我们希望的场景是,每次按保存键,webpack自动为我们打包,这个工具就是watch! 因为watch是webpack自带的插件, ...
- .Net core 下的ConfigurationManager类正确引用方法
大家在项目中经常会用到需要引用配置文件的情况,这也是我偶然间遇到的问题,菜鸟一枚,如有需纠正多谢指点. 正题 在不先引用using的情况下直接写 ConfigurationManager.AppSet ...
随机推荐
- Docker 集成 Jenkins Gitlab 实现 CI/CD
首先介绍下环境部分,文章中共涉及到三台服务器,分别用 Gitlab,Jenkins,Deploy 三个名称代替,部署在内网环境,同时因为政策原因,服务器无法直接连通外网.下载 Jenkins 插件时需 ...
- 4.4 Go goto continue break
4.4 Go goto continue break Go语言的goto语句可以无条件的跳转到指定的代码行执行. goto语句一般与条件语句结合,实现条件转义,跳出循环体等. Go程序不推荐使用got ...
- 2.3 Go内置函数
内置函数 Go 语言拥有一些不需要进行导入操作就可以使用的内置函数.它们有时可以针对不同的类型进行操作,例如:len.cap 和 append,或必须用于系统级的操作,例如:panic.因此,它们需要 ...
- WebApiClient性能参考
1 文章目的 昨天写了走进WebApiClientCore的设计,介绍了WebApiClient的变化与设计之后,收到大家支持的.赞许的,还有好的建议和顾虑,比如WebApiClient性能怎么样,有 ...
- Git基本操作命令合集
平时自己敲敲代码,使用Git命令也渐渐多了起来.使用起来的确很方便,今天来分享下Git基本概念和本地代码提交到github上的过程,很简单的,多操作几次就会了. Git定义 Git 是一个开源的分布式 ...
- Hills And Valleys 杭电多校第五场
题意:长度为n的序列,有一次翻转区间的机会,问最长不减序列 题解:如果没有翻转区间的机会,有两个做法. 一是dp[i]表示以i结尾的最长序列 dp[i]=max(dp[i],dp[j]+1) (j& ...
- Java——Json字符串与Object互转
public static void JacksonTest() {//推荐 //{"MNG001":[{"ID":"1","PW ...
- 【解决办法】IIS环境中,打开网站后就直接列出了所有文件
有时候访问一个不应当被访问的网站目录时网站会列出该目录下的所有文件,这很不安全,尤其是我们希望我们自己的网站不出现这种情况,如下图所示. 解决办法,在网站根目录新建web.config文件,内容如下: ...
- 人机协同与AI能力训练
我们进行<中台战略>一书的第三期分享. “人机融合是解决aI机器人冷启动的绝佳解决方案,我们这里引入了一个应答满意度的指标,每一个咨询应答都对应一个应答满意度.当消费者应该回答选择转入人工 ...
- 3.key的操作
我们之前使用Redis简单存储了三个参数: 在语句set name jack中,其中name就是一个key.我们Java中的变量名是有一定规则的,比如组成内容可以是“数字”,“字母”以及“下划线”. ...