python商业数据可视化_Python-matplotlib数据可视化:商业图表条形图

Python-matplotlib数据可视化:商业图表条形图

Python-matplotlib数据可视化:商业图表条形图

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

59fe8eee5c99ce17b31c842185abdda7.png

以下文章来源于DataCharm,作者 宁海涛

转载地址

https://www.zhihu.com/people/qi-shi-huan-hao-la-14/posts

76bf7f578299c11a5ccfe95fb25ff853.png

绘制图标介绍

这篇推文是关于中美贸易的文章配图(具体我们这里我们不多做介绍,我们只关注配图的美观设计),文章的插图如下:

51b2a158caba4289b9724d8dfcd6c279.png

配图是真的没话说,特别是配色(这种配色我后面会做一个Excel的配图颜色系会比这个多几个色系。大家如果需求多,我会分享出来的哦)

Python matplotlib

绘图数据

这里的数据处理步骤暂且不过多介绍,绘图数据如下

9346fdebcd5a94ba6cb5e20c3b823c10.png

f3c79bab212c19fdce08b8e26093f3fa.png

可视化

我们直接上代码,大家不会的可以详细看代码中的注释:

china_color = ['#3D71A0','#B70050','#FD9717','#B6CBDF']

china_text = ['Aluminum waste and scrap','Pork','Fruits and nuts','Other']

us_color = ['#3D71A0','#B70050','#FD9717','#B6CBDF','#3DAE5E','#133831']

us_list = ['64%', '12%', '10%', '8%', '6%', '']

us_text = ['Aluminum','Long','Pipe/tube','Stainless','Flat',""]

barWidth = .6

lefts_china = 0

lefts_us = 0

fig,ax = plt.subplots(figsize=(8,4.5),dpi=200)

for bars, col,text,text2 in zip(china['2017 exports, in actual dollars'], china_color,china['percent%'],china_text):

ax.barh(1, bars, left=lefts_china, color=col, height=barWidth,align='center')

lefts_china += bars

#大家注意这里:可以详细看一下

if lefts_china == china['2017 exports, in actual dollars'][0]:

ax.text(bars/2,1,text,color="k",fontweight='extra bold',size=13,ha='center',va='center')

ax.text(bars/2,1.4,text2,color="k",fontweight='light',size=8,ha='center',va='center')

else:

ax.text(lefts_china-bars/2,1,text,color="k",fontweight='extra bold',size=13,ha='center',va='center')

ax.text(lefts_china-bars/2,1.4,text2,color="k",fontweight='light',size=8,ha='center',va='center')

#添加暗黑色柱形图

ax.barh(.6,china['2017 exports, in actual dollars'].sum(),color='#172A39',height=.35,zorder=0)

for bars, col,text,text2 in zip(us['2017 imports, in actual dollars2'], us_color,us_list,us_text):

ax.barh(3, bars, left=lefts_us, color=col, height=barWidth,align='center')

lefts_us += bars

if lefts_us == us['2017 imports, in actual dollars2'][0]:

ax.text(bars/2,3,text,color="k",fontweight='extra bold',size=13,ha='center',va='center')

ax.text(bars/2,3.4,text2,color="k",fontweight='light',size=8,ha='center',va='center')

else:

ax.text(lefts_us-bars/2,3,text,color="k",fontweight='extra bold',size=13,ha='center',va='center')

ax.text(lefts_us-bars/2,3.4,text2,color="k",fontweight='light',size=8,ha='center',va='center')

ax.barh(2.6,us['2017 imports, in actual dollars2'].sum(),color='#172A39',height=.35,zorder=0)

#定制化设置

ax.axis('off')

ax.axvline(x=0,ymin=.05,color='k',lw=.8)

ax.set_ylim(bottom=0,top=4)

#添加文本信息

ax.text(.02,.95,"Chinese exports covered by US Section 232 tariffs",

transform = ax.transAxes,color='k',ha='left',va='center',size=9,fontweight='semibold')

ax.text(.3,.64,"$2.8 BILLION EXPORT VALUE,2017",

transform = ax.transAxes,color='white',ha='left',va='center',size=8.5,fontweight='semibold')

#添加文本信息

ax.text(.02,.45,"US exports covered by Chinese retaliatory tariffs for US Section 232 tariffs",

transform = ax.transAxes,color='k',ha='left',va='center',size=9,fontweight='semibold')

ax.text(.2,.14,"$2.4 BILLION EXPORT VALUE,2017",

transform = ax.transAxes,color='white',ha='left',va='center',size=8.5,fontweight='semibold')

#再单独添加 semi-finished 描述部分

ax.text(us['2017 imports, in actual dollars2'].sum(),3,"<1%",ha='left',va='center',size=13,

fontweight='extra bold')

ax.text(us['2017 imports, in actual dollars2'].sum(),3.4,"Semi-finished",ha='left',va='center',size=8,

fontweight='light')

#添加小横线

ax.plot([us['2017 imports, in actual dollars2'][:1].sum(),us['2017 imports, in actual dollars2'].sum()],[3.55,3.55],

color='k',lw=.6)

text_loc = us['2017 imports, in actual dollars2'][:3].sum()

ax.text(text_loc,3.64,"STEEL PRODUCTS",ha='center',va='center')

#添加刻度文本

ax.text(-.02,.2,"CHINESE\nACTION IN\nEFFECT\nAPRIL 2",ha='right',va='center',fontweight='medium',size=11,

transform = ax.transAxes)

ax.text(-.02,.7,"US ACTION\nINEFFECT\nMARCH 23",ha='right',va='center',fontweight='medium',size=11,

transform = ax.transAxes)

#添加标题

ax.text(-.1,1.15,"How Is China Retaliating for US Nation\nSecurity Tariffs on Steel and Aluminum?",

transform = ax.transAxes,color='k',ha='left',va='center',size=20,fontweight='extra bold')

ax.text(.91,.05,'\nVisualization by DataCharm',transform = ax.transAxes,

ha='center', va='center',fontsize = 7,color='black')

plt.savefig(r'F:\DataCharm\商业艺术图表仿制\PIEE_Charts\China US\PIEE_china_us02.png',width=8,height=4,

dpi=900,bbox_inches='tight',facecolor='white')

#ax.set_axisbelow(True)

plt.show()

最终我们绘制的效果如下:

d6009d7c4effaf64397c6658dcb10d51.png

知识点

横向堆积柱形图绘制 这里举一个小栗子大家看下就可以:

from matplotlib import pyplot as plt

import numpy as np

N = 5

r = range(N)

bars1 = np.random.binomial(20, .7, N)

bars2 = np.random.binomial(20, .5, N)

bars3 = np.random.binomial(20, .4, N)

colors = ['#7f6d5f', '#557f2d', '#2d7f5e']

labels = ["Lasso", "Random Forest", "Decision Tree"]

barWidth = 1

lefts = 0

fig,ax = plt.subplots(figsize=(8,4.5),dpi=200)

for bars, col, label in zip([bars1, bars2, bars3], colors, labels):

plt.barh(r, bars, left=lefts, color=col, edgecolor='white', height=barWidth, label=label)

lefts += bars

plt.legend()

plt.ylim(-0.5, len(bars) - 0.5)

ax.text(.91,-.08,'\nVisualization by DataCharm',transform = ax.transAxes,

ha='center', va='center',fontsize = 7,color='black')

plt.savefig(r'F:\DataCharm\商业艺术图表仿制\PIEE_Charts\China US\PIEE_china_example.png',width=8,height=4,

dpi=900,bbox_inches='tight')

plt.show()

结果如下:

da69644e304fcf620771d81360e9e13c.png

文本自动添加 虽然代码中有明确解释,但这里我们还是单独进行展示:

for bars, col,text,text2 in zip(us['2017 imports, in actual dollars2'], us_color,us_list,us_text):

ax.barh(3, bars, left=lefts_us, color=col, height=barWidth,align='center')

lefts_us += bars

if lefts_us == us['2017 imports, in actual dollars2'][0]:

ax.text(bars/2,3,text,color="k",fontweight='extra bold',size=13,ha='center',va='center')

ax.text(bars/2,3.4,text2,color="k",fontweight='light',size=8,ha='center',va='center')

else:

ax.text(lefts_us-bars/2,3,text,color="k",fontweight='extra bold',size=13,ha='center',va='center')

ax.text(lefts_us-bars/2,3.4,text2,color="k",fontweight='light',size=8,ha='center',va='center')

注意里面的if条件语句设置哦!

Python-matplotlib数据可视化:商业图表条形图相关教程

C语言基本数据类型输入输出格式

C语言基本数据类型输入输出格式 首先看一下C语言的基本数据类型 在C语言中,用int关键字来表示基本的整数类型。后3个关键字(long、short和unsigned)和C90新增的signed用于提供基本整数类型的变式,例如unsigned short int和long long int。char关键字用于指

牛客SQL练习-44-将id=5以及emp_no=10001的行数据替换成id=5以及e

牛客SQL练习-44-将id=5以及emp_no=10001的行数据替换成id=5以及emp_no=10005,其他数据保持不变,使用replace实现 REPLACE INTO titles_testVALUES(5,10005,'Senior Engineer','1986-06-26','9999-01-01') 注意: replace和update的区别:\ update语句使用where

【亡羊补牢】挑战数据结构与算法 第70期 LeetCode 121. 买卖股票

【亡羊补牢】挑战数据结构与算法 第70期 LeetCode 121. 买卖股票的最佳时机(DP) 仰望星空的人,不应该被嘲笑 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算

python数据分析与挖掘实战的混淆矩阵纠错

python数据分析与挖掘实战的混淆矩阵纠错 #-*- coding: utf-8 -*-#使用神经网络算法预测销量高低from keras.models import Sequentialfrom keras.layers.core import Dense, Activationimport pandas as pdfrom cmplot import *#参数初始化from numpy import

ArcGis 10连接64位Oracle数据库

ArcGis 10连接64位Oracle数据库 为什么80%的码农都做不了架构师? ArcGIS 10的客户端是32位的,所以当我们链接数据库时需要保证数据库的客户端是32位的,但是由于我使用的是64位的Windows Server服务器和64位的数据库服务器,因此ArcGis并不能直接连接到Orac

Windows Server 2008 R2下安装Oracle 11g数据库

Windows Server 2008 R2下安装Oracle 11g数据库 为什么80%的码农都做不了架构师? 1.下载Oracle 11g 进入Oracle官网进行下载,下载链接: (http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html) 选择需要的版本,这里我

Oracle 11g数据库使用pl/sql developer进行数据导入与导出

Oracle 11g数据库使用pl/sql developer进行数据导入与导出 为什么80%的码农都做不了架构师? 物理备份:将实际组成数据库的操作系统文件从一处复制到另一处的过程,通常是从磁盘备份到磁盘或磁带,可以使用RMAN(Recovery Manager)或操作系统命令进行物理备

滴滴三面已拿offer分享个人面试总结(集合+网络+算法+JVM+数据库

滴滴三面已拿offer,分享个人面试总结(集合+网络+算法+JVM+数据库+分布式) 滴滴Java高级工程师三面,包含:多线程、JVM、框架源码、数据库、分布式、算法等 1、自我介绍 2、项目情况: (1)选择最为熟悉的一到两个项目说明,提及该项目中的难点问题,以及

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值