Python数据可视化笔记03--柱状图、饼状图实战

Python数据可视化笔记01--Matplotlib基础

Python数据可视化笔记02--折线图、散点图实战 

本文索引:

  1. 柱状图
  2. 饼状图

环境:Windows10 + jupyter notebook

一、柱状图

【柱状图】

  • 使用Matplotlib提供的bar()函数来绘制柱状图。
  • 与前面介绍的plot()函数类似,程序每次调用bar()函数时都会生成一组柱状图,如果希望生成多组柱状图,则可通过多次调用bar()函数来实现。
  • 只要将bar()函数理解透彻,我们就能绘制各种类型的柱状图。
  • 如下图:

附:https://matplotlib.org/gallery/index.html 

../../_images/sphx_glr_bar_stacked_001.png

【柱状图绘图方法】

bar(x,height,width=0.8,*,align='center',**kwargs)

主要参数:

  • x:包含所有柱子下标的列表。
  • height:y轴的数值序列,也是柱状图的高度,一般就是我们需要展示的数据。
  • width:为柱状图宽度,一般为0.8即可。
  • align:柱子对齐方式,有两个可选值:center和edge。center表示每根柱子是根据下标来对齐,edge则表示根据每根柱子全部以下标为起点,然后显示到下标的右边。如果不指定该参数,默认值是center。

可选参数:

  • color:每根柱子呈现的颜色,可指定一个固定值或者一个列表。
  • edgecolor:每根柱子边框的颜色。
  • linewidth:每根柱子的边框宽度。如果没有设置该参数,默认无边框。
  • tick_label:每根柱子上的标签,默认无标签。
  • xerr:每根柱子顶部在横轴方向的线段长度。
  • yerr:每根柱子顶端在纵轴方向的线段长度。
  • ecolor:设置xerr和yerr线段的颜色,可以指定一个固定值或者一个列表。

柱状图实战:还用matplotlib绘制

  • 普通柱状图实战:简单柱状图 数据[1.5,0.6,7.8,6] 
import matplotlib.pyplot as plt

num_list = [1.5,0.6,7.8,6]
plt.bar(range(len(num_list)),num_list)  # #指定横坐标数据为num_list的长度,纵坐标数据为num_list列表元素
plt.show()

运行结果:

  • 下面我们来设置柱子颜色来看看:只需要直接添加一个参数color
import matplotlib.pyplot as plt

num_list = [1.5,0.6,7.8,6]
plt.bar(range(len(num_list)),num_list,color='rgbc')   
plt.show()

运行结果:

  • 设置标签
import matplotlib.pyplot as plt

name_list=["Monday","Tuesday","Friday","Sunday"]
num_list = [1.5,0.6,7.8,6]
plt.bar(range(len(num_list)),num_list,color='rgbc',tick_label = name_list)   
plt.show()

运行结果:

  • 再来看堆叠的柱状图,再加上图例:
import matplotlib.pyplot as plt

name_list=["Monday","Tuesday","Friday","Sunday"]
num_list = [1.5,0.6,7.8,6]
num_list2 = [1,2,3,1]    # 增加以个列表数据,用于堆叠
plt.bar(range(len(num_list)),num_list,color='r',tick_label = name_list,label = 'boys')   
# 多次调用bar()函数实现多次绘制,指定以num_list基础堆叠
plt.bar(range(len(num_list)),num_list2,color='g',tick_label = name_list,bottom = num_list,label = 'girls') 
plt.legend(loc = 'best')  # 图例位置指定
plt.show()

运行结果:

  • 横向条形图:只需要将bar()函数修改为barh()函数
import matplotlib.pyplot as plt

num_list = [1.5,0.6,7.8,6]
plt.barh(range(len(num_list)),num_list,color='rgbc')   
plt.show()

运行结果:

  • 并列柱状图:
import matplotlib.pyplot as plt

name_list=["Monday","Tuesday","Friday","Sunday"]
num_list = [1.5,0.6,7.8,6]
num_list2 = [1,2,3,1]   

x = list(range(len(num_list)))

# 设置柱子总宽0.8,共两个,每个0.4
total_width = 0.8
n=2
width = total_width / n

plt.bar(x,num_list,width = width,label = 'boys')
# 设置循环使两个对比的柱子并列,方便做对比
for i in range(len(x)):
    x[i] = x[i] + width

plt.bar(x,num_list2,width = width,label = 'girls',tick_label = name_list)
    
plt.legend(loc = 'best') 
plt.show()

运行结果:


二、饼状图

【概念】

../../_images/sphx_glr_pie_features_001.png

  • 饼状图显示一个系列中各项的大小和各项总和的比例。
  • 饼状图可自动根据数据的百分比画饼

【绘制饼状图的基本语法】

  • 创建数组x的饼图,每个扇形的面积由x/sum(x)决定
  • 若sum(x)<1,则x数组不会被初始化,x值即为扇形区域面积占比。注意,这种情况会出现1-sum(x)的空楔形
  • sum(x)>1,则由x[i]/sum(x)算出每个楔形占比,饼状图360°区域均被填充

【饼状图绘图方法pie()】

pie(x,explode = None,lanels = None,colors = None,autopct = None,pctdistance = 0.6,
shadow = False,labeldistance = 1.1,startangle = None,radius = None,
counterclock = True,wedgeprops = None,textprops = None,center = (0,0),frame = False,
rotatelabels = False,hold = None,data = None)

【参数详解】

  • x:(创建饼状图的数据,每一块)的比例,如果sum(x)>1会使用sum(x)归一化,即总和按比例分100%;
  • explode:(每一块)离开中心距离,一个list或数组;
  • labels:list,optional,default:None;为每个楔形添加标签;
  • color = array-like,optional,default:None;若无,则用currently active cycle中的颜色添加;
  • autopct:控制饼图内百分比设置,可以使用format字符串或者format function:可以是整数('%d%%')、浮点数('%1.3f%%')、字符串('%s%%')、函数。
  • label_distance:float,optional,default:1.1;label标记的绘制位置,相对于半径的比例,默认值为1.1,如果小于1则绘制在饼图内侧。
  • pctdistance:float,optional,default:0.6;类似于labeldistance,指定autopct的位置刻度,默认值为0.6;
  • shadow:bool,optioanl,default:False;为饼图画阴影(True);
  • startangle:float,optioanl,default:None;其实绘制角度,默认图是从x轴正方向逆时针画起,如设定=90则从y轴正方向画起;
  • radius:float,optioanl,default:None;饼图半径,若为None时,默认为1;
  • counterclock:bool,optioanl,default:True;指定分数方向,逆时针(True)或顺时针。
  • wedgeprops:dict,optioanl,default:None;描述楔形边界线宽度值,参数形式"wedgeprops = {'linewidth':3}"楔形边界线宽度为3;
  • textprops:dict,optioanl,default:None;传递给文本对象的字典参数;
  • center:list of float,optioanl,default:(0,0);图标的中心为,默认(0,0),也可以是两个标量的序列(sequence of 2 scalars);

饼状图实战:

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']   # 用于显示中文标签

labels = 'A','B','C','D'
sizes = [10,20,30,40]

plt.pie(sizes,labels = labels)
plt.title('简单饼状图')
plt.show()

运行结果:

指定explode参数:一块饼图到中心的距离,默认为0

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']   # 用于显示中文标签

labels = 'A','B','C','D'
sizes = [10,20,30,40]
explode = (0,0,0.1,0)
plt.pie(sizes,labels = labels,explode = explode)
plt.title('简单饼状图')
plt.show()

运行结果:

指定colors:数组,可选参数,默认为:None;用来标注每块饼图的matplotlib颜色参数序列 

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']   # 用于显示中文标签

labels = 'A','B','C','D'
sizes = [10,20,30,40]
explode = (0,0,0.1,0)
color = ['r','g','b','c']   # 添加颜色参数
plt.pie(sizes,labels = labels,explode = explode,colors = color)
plt.title('简单饼状图')
plt.show()

运行结果:

autopct:控制饼图内百分比设置,可以使用format字符串或者format function; 

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']   # 用于显示中文标签

labels = 'A','B','C','D'
sizes = [10,20,30,40]
explode = (0,0.1,0,0)
color = ['r','g','b','c']  
# 添加autopct参数,指定百分比格式
plt.pie(sizes,labels = labels,explode = explode,colors = color,autopct = '%1.1f%%')
plt.title('简单饼状图')
plt.show()

运行结果:

x:每一块饼图的比例,为必填项,如果sum(x)>1,会将多出的部分进行均分; 

# 当数据总和大于1时,自动分配

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']   # 用于显示中文标签

labels = 'A','B','C','D'
sizes = [0.1,0.2,0.3,0.7]
explode = (0,0.1,0,0)
color = ['r','g','b','c']   # 添加颜色列表
plt.pie(sizes,labels = labels,explode = explode,colors = color,autopct = '%1.1f%%')
plt.title('简单饼状图')
plt.show()

运行结果:

# 当数据部分总和小于1时,会将缺少部分空出

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']   # 用于显示中文标签

labels = 'A','B','C','D'
sizes = [0.1,0.2,0.3,0.2]
explode = (0,0.1,0,0)
color = ['r','g','b','c']   # 添加颜色列表
plt.pie(sizes,labels = labels,explode = explode,colors = color,autopct = '%1.1f%%')
plt.title('简单饼状图')
plt.show()

运行结果:

添加图例,plt.legend() 

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']   # 用于显示中文标签

labels = 'A','B','C','D'
sizes = [0.1,0.2,0.3,0.7]
explode = (0,0.1,0,0)

color = ['r','g','b','c']   
plt.pie(sizes,labels = labels,explode = explode,colors = color,autopct = '%1.1f%%')
plt.title('简单饼状图')
# 设置图例格式和位置
plt.legend(loc="upper right",fontsize = 8,borderaxespad = 0.3)
plt.show()

Python数据可视化还有最后一部分即将更新完毕,希望一起学习的小伙伴多多练习实践,一起加油吧,新年快乐!!!

发布了51 篇原创文章 · 获赞 5 · 访问量 1988

猜你喜欢

转载自blog.csdn.net/MARS_098/article/details/104082536