Python-matplotlib 商业图表 - 散点图


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

作者:宁海涛

来源:DataCharm

虽然小伙伴们喜欢空间绘图方面的居多(毕竟这方面的小伙伴居多),但商业图表的绘制也不能放下哦!本期就推出一篇商业图表的仿制教程。主要涉及内容如下:

  • Python-matplotlib 散点图绘制

  • 文本条件添加

Python-matplotlib 散点图绘制

本篇推文的原始图片还是来自于PIIE网站的一篇文章配图,文章的插图如下:

配图是真的没话说,特别是配色(这种配色我做一个Excel的颜色主题xml文件,如果需求多,可以看下这篇文章代码绘图繁琐量多?!Excel 了解一下)

所使用的数据形式如下:

接下来,我们给出直接仿制的代码,如下:

#开始绘图

fig,ax = plt.subplots(figsize=(3,3),dpi=400,facecolor='white',edgecolor='white')
ax.set_facecolor('white')

ax.hlines(y=data_02.index, xmin=0, xmax=data_02['Imp_gr_from_ROW'], color="#3D71A0",lw=.8)
#绘制散点
for i,j,text in zip(data_02.index,data_02['Imp_gr_from_ROW'],data_02['Imp_gr_from_ROW']):
    ax.scatter(j,i,s=6,color='#3D71A0',zorder=2)
    ax.text(j,i-.2,s=int(round(text*100,2)),size=3.5,color='#3D71A0',ha='left',va='bottom',fontweight='bold')

ax.hlines(y=data_02.index+.03, xmin=0, xmax=data_02['Imp_gr_from_China'], color="#B70050",lw=.8)
#绘制散点
for i,j,text in zip(data_02.index,data_02['Imp_gr_from_China'],data_02['Imp_gr_from_China']*100):
    ax.scatter(j,i+.03,s=6,color='#B70050',zorder=2)
    ax.text(j,i-.2,s=int(round(text,2)),size=3.5,color='#B70050',ha='right',va='bottom',fontweight='bold')
ax.set_xlim(left=-1,right=1)
#绘制竖线
ax.plot([0,0],[0,15],color='k',lw=.3)
#绘制竖线上散点
for i in data_02.index:
    ax.scatter(0,i,color='#172A3A',ec='k',s=2,zorder=3)
for index,i in enumerate(zip(data_02.index,data_02['Imp_gr_from_China'],data_02['Product'])):
    if i[1] > 0 :
        ax.text(0-.05,index,i[2],color='#3D71A0',size=3,ha='right',va='center',fontweight='bold')
    else:
        ax.text(i[1]-.05,index,i[2],color='#3D71A0',size=3,ha='right',va='center',fontweight='bold')
ax.axis('off')

#添加图例
ax.plot([],[],marker='o', label='China',color="#B70050")
ax.plot([],[],marker='o', label='Rest of world',color="#3D71A0")
legend_text = {'size':3,
               'weight':'bold'}
ax.legend(loc='upper left',frameon=False,markerscale=.3,ncol=2,prop=legend_text,columnspacing=.5,
          bbox_to_anchor=(-.1, 1.05))
ax.invert_yaxis()  #y轴反向
#添加标题
#添加标题
ax.text(-.1,1.15,"The trade war resulted in fewer American purchases of critical\nmedical products from China in 2019",
       transform = ax.transAxes,color='k',ha='left',va='center',size=5.5,fontweight='extra bold')
ax.text(-.1,1.07,"US import value growth rate, 2017-2019, percent",
       transform = ax.transAxes,color='#3D71A0',ha='left',va='center',size=3,fontweight='extra bold')

ax.text(.94,.01,'\nVisualization by DataCharm',transform = ax.transAxes,
        ha='center', va='center',fontsize = 3,color='black')
plt.savefig(r"F:\DataCharm\商业艺术图表仿制\PIEE_Charts\Trump's trade policy is hampering the US fight against COVID-19\fig01.png",
            width=3,height=4,dpi=900,bbox_inches='tight',facecolor='white')

最终可视化结果如下:

文本条件添加

本推文的绘图教程中,文本的添加还是值得学习一下的,代码如下:

#绘制竖线上散点
for i in data_02.index:
    ax.scatter(0,i,color='#172A3A',ec='k',s=2,zorder=3)
for index,i in enumerate(zip(data_02.index,data_02['Imp_gr_from_China'],data_02['Product'])):
    if i[1] > 0 :
        ax.text(0-.05,index,i[2],color='#3D71A0',size=3,ha='right',va='center',fontweight='bold')
    else:
        ax.text(i[1]-.05,index,i[2],color='#3D71A0',size=3,ha='right',va='center',fontweight='bold')

上述代码就可以实现可视化结果中左侧文本的设置效果;

此外,由于matplotlib 无法实现向ggplot的绘图元素映射,导致有时绘制图例就麻烦些,但可以使用以下方法单独绘制图例:

#添加图例
ax.plot([],[],marker='o', label='China',color="#B70050")
ax.plot([],[],marker='o', label='Rest of world',color="#3D71A0")
legend_text = {'size':3,
               'weight':'bold'}
ax.legend(loc='upper left',frameon=False,markerscale=.3,ncol=2,prop=legend_text,columnspacing=.5,
          bbox_to_anchor=(-.1, 1.05))

以上,就是本期商业图表绘制的全部内容,当然,如果后面可能我会使用R-ggplot2 进行仿制。

总结

本期推文我们进行商业图表第7弹的绘制,学习了散点图系列的绘制方法,此外,颜色的配置也是值得参考和学习的。大家可以直接关注公号:DataCharm,直接获取EXCEL颜色主题xml文件。

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


数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。
管理员二维码:
猜你喜欢
● 卧槽!原来爬取B站弹幕这么简单● 厉害了!麟哥新书登顶京东销量排行榜!● 笑死人不偿命的知乎沙雕问题排行榜
● 用Python扒出B站那些“惊为天人”的阿婆主!● 你相信逛B站也能学编程吗
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值