@
TOC
前言
Matplotlib 是 Python 的绘图库。 它可与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案。 它也可以和图形工具包一起使用,如 PyQt 和 wxPython。本文由浅入深,教你画柱状图
柱状图的部分源码
bar(x, height, width=0.8, bottom=None, *, align='center',
data=None, **kwargs)
这里是bar中部分源码(主要是参数部分),下面的内容将由浅入深逐渐演示各个参数的作用,以达到理解的作用,且能画出漂亮的柱状图。
一、画一个简单的柱状图
bar(x, height, width=0.8, bottom=None, *, align='center',
data=None, **kwargs)
首先,我们只需要指定两个参数,就可以画一个简单的柱状图
一个是x,一个是height.
x 的作用是设置柱所在的位置(也就是在x坐标上面的什么位置)
height的作用是设置柱状图的高度
x与geight的数据存储在list当中,在实际写入时,并不需要去指定,python会自动识别出来(可以去debug 一下进入plt.bar([xxxx],[xxxx])这个语句,就会发现bar会做特别多的事)
import matplotlib.pyplot as plt
plt.bar([0,1,2,3],[5,6,7,8])
plt.show()
二、设置坐标的刻度(ticks),轴的标签和标题
在数据分析的很多时候,我们各个柱下面通常不是x刻度值,而是有实际意义的字符串,那么这个时候就需要我们进行一个设置,比如说
1.plt.xticks(各个柱所在的x坐标的位置,想换成的标签)
一般传入将数据存在列表中再传入参数
设置r轴也同样的道理
2.设置x与y轴的标签就比较简单了
plt.xlabel(“”)
plt.ylabel(“”)
3.设置标题
plt.title(“i am title”)
import matplotlib.pyplot as plt
import matplotlib
data = [5, 6, 7, 8]
labels = ["a", "b", "c", "d"]
plt.bar(range(len(data)), data)
plt.xticks(range(len(data)),labels)
plt.xlabel("i am x")
plt.ylabel("i am y")
plt.title("i am title")
plt.show()
三、设置图的颜色
这里我只说非常简单的设置颜色的方法,因为如果详细的说如何设置关于颜色的东西,需要另外写一篇博文来详细说明,这一篇是不够的,但我会放一个链接,里面会有非常详细关于颜色的设置.
颜色的设置在bar中,我们只需要写color = [xxxxx]就可以设置
如果需要设置的量比较大,还可以这样设置
import matplotlib.colors as mcolors
colors = list(mcolors.TABLEAU_COLORS.keys())
import matplotlib.pyplot as plt
import matplotlib
data = [5, 6, 7, 8]
labels = ["a", "b", "c", "d"]
colors = ["red","yellow",'blue','black']
plt.bar(range(len(data)), data,color=colors)
plt.xticks(range(len(data)),labels)
plt.xlabel("i am x")
plt.ylabel("i am y")
plt.title("i am title")
plt.show()
更多设置颜色的方法,请看下面的几篇博文:
一文搞懂matplotlib中的颜色设置
Python Matplotlib绘制渐变色柱状图(bar)并加边框和配置渐变颜色条(colorbar)
四、设置柱的透明度
这个也比较容易,在bar中写入alpha=x就就可以了,x在0-1之间,这里不作过多展示
五、设置柱的宽度(width)
width宽度是在bar中的参数
设置也很容易,我们只需要指定一个数值即可,即width = x
width 的默认值是0.8,如果想让各个柱挨在一起,可以设置width = 1.0
width一般设置范围就在(0,1)之间。
width设置大于1.0 或者是负数也是可以的 ,可以自己尝试一下。
import matplotlib.pyplot as plt
import matplotlib
data = [5, 6, 7, 8]
labels = ["a", "b", "c", "d"]
colors = ["red","yellow",'blue','black']
plt.bar(range(len(data)), data,color=colors,width=0.5)
plt.xticks(range(len(data)),labels)
plt.xlabel("i am x")
plt.ylabel("i am y")
plt.show()
这个是width = 0.5
这个是width = 1.0
这个是width = 5
六、在柱上添加数据
上面我们画出了图,但是各个图的高度并不能非常清晰的看出来,于是我们可以在上面添加各个数的高度,那么就需要用到下面的函数
plt.text()
plt.text(x=100, y=100, s=‘text’, rotation=90)
x=:表示在画布上的x坐标
y=:表示在画布上的y坐标
s=:表示需要展示的文本
rotation=:表示文本的旋转角度
import matplotlib.pyplot as plt
import matplotlib
data = [5, 6, 7, 8]
labels = ["a", "b", "c", "d"]
colors = ["red","yellow",'blue','black']
plt.bar(range(len(data)), data,color=colors,width=0.5)
plt.xticks(range(len(data)),labels)
for i in range(len(data)):
plt.text(x= i- 0.05 , y=data[i] + 0.2, s = '%d' % data[i])
plt.xlabel("i am x")
plt.ylabel("i am y")
plt.title("i am title")
plt.show()
总结
以上操作,基本可以画出来一个像样的图了,更加具体的,可以更加深入的了解其中的各个参数,对细节进行更多的打磨,谢谢。