Python-seaborn 基础图表绘制-散点图

公众号后台回复“图书“,了解更多号主新书内容

 作者:宁海涛

 来源:DataCharm

上期推文推出第一篇基础图表绘制-R-ggplot2 基础图表绘制-散点图 的绘制推文,得到了很多小伙伴的喜欢,也是我更加想使这个系列做的更加完善和系统,我之前也有说过,会推出Python和R的两个版本绘制教程,接下来我们就推出基础散点图的Python绘制版本。本期主要涉及的知识点如下:

  • Python-seaborn 绘制多类别散点图

  • seaborn 定制化美化设置

Python-seaborn 绘制多类别散点图

由于涉及的图表类型为多类别散点图的绘制,在使用常规matplotlib进行绘制时会显得格外繁琐,所以我们选择了对matplotlib进行了更高级的API封装,使作图更加容易的seaborn包进行图表的绘制,更多seaborn 介绍,大家可以直接去seaborn官网进行相关资料的查阅。数据的读取使用的功能强大的数据处理包 pandas ,这里只是进行简单的删除空值操作,直接使用dropna() 函数操作即可,我们直接预览数据,如下(部分):由于我们直接使用了seaborn进行图表的绘制,绘图代码也得到了极大的简化,默认的绘图代码如下:

fig, ax = plt.subplots(figsize=(6,5),dpi=200)
scatter = sns.scatterplot(data=penguins_df,x="bill_length_mm",y="bill_depth_mm",hue="species",
                          size="body_mass_g",ec="k",alpha=.9,ax=ax)
scatter.legend()
ax.text(.91,-.1,'\nVisualization by DataCharm',transform = ax.transAxes,
        ha='center', va='center',fontsize = 7,color='black')

可视化效果如下:

这配色、这布局······,这个图表中主要存在如下问题:

  1. 刻度、轴脊、XY刻度标签等属性过于简陋。

  2. 图例添加太随意,需要定制化操作(重点)

  3. 整体的绘图主题过于简单。

针对以上几个问题,接下来我们对其进行美化操作。

seaborn 定制化美化操作

详细的美化操作对于seaborn来说,代码过多,且需记住的绘图函数也较多,这里和R-ggplot2 绘图一样,我们直接选择matplotlib 绘图主题进行设置即可,此外,我们还对图例等图元素进行设置,具体代码如下:

plt.rcParams["font.family"] = "Arial-Narrow"
palette = ("#FF8C00", "#A034F0", "#159090")
plt.style.use('fivethirtyeight')
fig, ax = plt.subplots(figsize=(6,5),dpi=200)
scatter = sns.scatterplot(data=penguins_df,x="bill_length_mm",y="bill_depth_mm",hue="species",size="body_mass_g",
                    palette=palette,ec="white",alpha=.9,ax=ax)

#自定义图例设置
handles,labels = scatter.get_legend_handles_labels()
labels_size =  labels[5:]
labels_size = [str(int(i)/1000)+" kg" for i in labels_size]

scatter.legend(handles=handles[1:4] + handles[5:], labels=labels[1:4] + labels_size ,ncol=1,loc="lower right",
               frameon=False,fontsize=7,markerscale=1,bbox_to_anchor=(1, 0.0))

scatter.set_xlabel("Bill length (mm)")
scatter.set_ylabel("Bill depth (mm)")

#添加标题
ax.text(-.08,1.1,"Base Charts in Python Exercise 01: Point Charts",
       transform = ax.transAxes,color='k',ha='left',va='center',size=15,fontweight='extra bold')

ax.text(.91,-.1,'\nVisualization by DataCharm',transform = ax.transAxes,
        ha='center', va='center',fontsize = 7,color='black')

plt.show()

这里注意以下几点:

  1. 绘图主题的选择

plt.style.use('fivethirtyeight')

这样就选择了对应的绘图主题。

  1. 自定义图例设置

handles,labels = scatter.get_legend_handles_labels()
labels_size =  labels[5:]
labels_size = [str(int(i)/1000)+" kg" for i in labels_size]

scatter.legend(handles=handles[1:4] + handles[5:], labels=labels[1:4] + labels_size ,ncol=1,loc="lower right",
               frameon=False,fontsize=7,markerscale=1,bbox_to_anchor=(1, 0.0))

该部分代码就实现了图例的定制化操作,具体包括:图例元素选择、位置以及排列方式等.

这里指出一下:由于seaborn是对matplotlib的高度封装,这也导致其对个别图表元素的定制化设置就相对较难(如图例)

最终的可视化效果如下:

当然我们还可以将图例放置在上方并排显示,对应修改代码如下:

scatter.legend(handles=handles[1:4] + handles[5:], labels=labels[1:4] + labels_size ,ncol=8,loc="upper center",
               frameon=False,fontsize=7,markerscale=1,bbox_to_anchor=(0.5, 1.03))

可视化效果如下:

总结

本期推文我们推出了基础散点图的Python绘制版本,希望可以满足喜欢使用Python绘图的小伙伴。大家有啥意见也可以在文末 读者讨论 区进行谈论交流啊。

◆ ◆ ◆  ◆ ◆
麟哥新书已经在京东上架了,我写了本书:《拿下Offer-数据分析师求职面试指南》,目前京东正在举行100-40活动,大家可以用相当于原价5折的预购价格购买,还是非常划算的:

数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。

管理员二维码:


猜你喜欢

● 卧槽!原来爬取B站弹幕这么简单● 厉害了!麟哥新书登顶京东销量排行榜!● 笑死人不偿命的知乎沙雕问题排行榜
● 用Python扒出B站那些“惊为天人”的阿婆主!● 你相信逛B站也能学编程吗
  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值