python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > matplotlib 绘制柱状图

Python用 matplotlib 绘制柱状图

作者:盆友圈的小可爱

这篇文章主要介绍了Python如何用 matplotlib 绘制柱状图,文章对matplotlib模块中详细学习绘制各种柱状图标相关属性和方法,在遇到需要直观展示离散数据点的差异时,我们可以使用bar()或者barh()绘制美观的图表。具有一定的参考价值,需要的朋友可以参考一下

复习回顾:

Python 为数据展示提供了大量优秀的功能包,其中 matplotlib 模块可以方便绘制制作折线图、柱状图、散点图等高质量的数据包。
关于 matplotlib 模块,我们前期已经对matplotlib进行基本框架、以及常用方法的学习

 matplotlib 模块基础知识:对matplotlib模块进行初步认识,对常用的方法进行学习
matplotlib 模块底层原理:matplotlib 模块包含脚本层、美工层及后端层三层细节了解
matplotlib 模块折线图绘制:总结折线图相关属性和方法

在 matplotlib 模块提供的图表中,除了折线图使用最多外,柱状图也是我们日常数据分析的图表。

接下来我们开始学习绘制柱状图相关属性和方法

1. 柱状图概述

1.1什么是柱状图

1.2柱状图使用场景

1.3柱状图绘制步骤

1.3案例展示

本次,我们分析过去5年内的产品年销量展示

案例所用到的数据如下:

import random

x_data = ["20{}年".format(i) for i in range(16,21)]
y_data = [random.randint(100,300) for i in range(6)]

绘制柱状图

import matplotlib.pyplot as plt

plt.rcParams["font.sans-serif"]=['SimHei']
plt.rcParams["axes.unicode_minus"]=False

for i in range(len(x_data)):
    plt.bar(x_data[i],y_data[i])

plt.title("销量分析")
plt.xlabel("年份")
plt.ylabel("销量")

plt.show()

2. 柱状图属性

2.1柱状体颜色填充

属性值 说明 属性值 说明
"b"/"bule" 蓝色 "m"/"magenta" 品红
"g" /"green" 绿色 "y"/"yellow" 黄色
"r"/"red" 红色 "k"/"black" 黑色
"c"/"cyan" 青色 "w"/"white"
rgb:

2.2状描边设置

柱状体边框颜色

柱状体边框样式

属性值 说明
"-" 、"solid" 默认实线显示
"--"、"dashed" 虚线
"-." "dashdot" 点划线
":"、"dotted" 虚线
"None" """"

2.3状体边框宽度

hatch: 设置填充样式
属性取值:{'/', '', '|', '-', '+', 'x', 'o', 'O', '.', '*'} |

2.4刻度标签

我们对 第一节柱状图添加边框样式为"--",添加指定rgb颜色,填充圆圈

for i in range(len(x_data)):
   plt.bar(x_data[i],y_data[i],color=(0.2*i,0.2*i,0.2*i),linestyle="--",hatch="o")

3. 堆叠柱状图

在第一节案例中,添加一组y轴数据所有数据如下:

x_data = ["20{}年".format(i) for i in range(16,21)]
 y_data = list(random.randint(100,300) for i in range(5))
 y2_data = list(random.randint(100,300) for i in range(5))

再添加一次pyplot.bar方法,添加bottom属性

 plt.bar(x_data,y_data,lw=0.5,fc="r",label="Phone")
 plt.bar(x_data,y2_data,lw=0.5,fc="b",label="Android",bottom=y_data)


4. 并列柱状图

在绘制并列的柱状图中,要控制好每个柱状体的位置和大小可以使用width属性

例如继续改造上面案例,我们为bar1和bar2添加了width属性后,单独设置x轴并排的宽度为0.3

x_width = range(0,len(x_data))
x2_width = [i+0.3 for i in x_width]


plt.bar(x_width,y_data,lw=0.5,fc="r",width=0.3,label="Phone")
plt.bar(x2_width,y2_data,lw=0.5,fc="b",width=0.3,label="Android")

plt.xticks(range(0,5),x_data)

5. 水平柱状图

柱状图中,有时候需要让柱状图水平放置,比较差异,我们这时候需要使用到barh方法

x_data = ["20{}年".format(i) for i in range(16,21)]
  y_data = list(random.randint(100,300) for i in range(5))
  y2_data = list(random.randint(100,300) for i in range(5))

  x_width = range(0,len(x_data))
  x2_width = [i+0.3 for i in x_width]

  plt.barh(x_width,y_data,lw=0.5,fc="r",height=0.3,label="Phone")
  plt.barh(x2_width,y2_data,lw=0.5,fc="b",height=0.3,label="Android")
  plt.yticks(range(0,5),x_data)

  plt.legend()

  plt.title("销量分析")
  plt.ylabel("年份")
  plt.xlabel("销量")

  plt.show()

6. 添加折线柱状图

我们在查看柱状图时,有时候会需要辅助折线来查看

plt.plot(x_data,y_data,color="pink",linestyle="--")

plt.plot(x_data, y2_data+200, color="skyblue", linestyle="-.")

# 柱状图
plt.bar(x_data,y_data,lw=0.5,fc="r",width=0.3,label="Phone",alpha=0.5)
plt.bar(x_data,y2_data, lw=0.5, fc="b", width=0.3, label="Android",alpha=0.5,bottom=y_data)

for i,j in zip(x_data,y_data):

   plt.text(i,j+0.05,"%d"%j,ha="center",va="bottom")

for i2,j2 in zip(x_data,y2_data):

   plt.text(i2,j2+180,"%d"%j2,ha="center",va="bottom")

7. 正负柱状图

我们需要使用Axes对象来设置坐标轴的位置

y_data = np.random.randint(100, 300,5)
y2_data = np.random.randint(100, 300,5)

ax = plt.gca()
ax.spines["bottom"].set_position(('data', 0))

plt.bar(x_data,+y_data,lw=0.5,fc="r",width=0.3,label="Phone")
plt.bar(x_data,-y2_data, lw=0.5, fc="b", width=0.3, label="Android")

for i,j in zip(x_data,y_data):

    plt.text(i,j,"%d"%j,ha="center",va="top")

for i2,j2 in zip(x_data,y2_data):

    plt.text(i2,-j2,"%d"%j2,ha="center",va="bottom")

总结:
本文我们atplotlib模块中详细学习绘制各种柱状图标相关属性和方法,在遇到需要直观展示离散数据点的差异时,我们可以使用bar()或者barh()绘制美观的图表。

到此这篇关于Python用 matplotlib 绘制柱状图的文章就介绍到这了,更多相关matplotlib 绘制柱状图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文