python簇状柱形图_python学习之路--可视化利器matplotlib(上)

前几期已经把读写数据、数据预处理等介绍完了,今天我们接着介绍一个可视化的库matplotlib,虽说现在已经有了更为高级的可视化库,如seaborn,ploty,pyecharts等,但是matplotlib是最为基础,作图思路最为全面的可视化库,学会了matplotlib之后,再学其他的就显得更为简单。

1.作图之前

为了使得作图能正常的显示,作图之前往往都需要添加以下代码:

#解决中文乱码的问题

plt.rcParams["font.sans-serif"] = "SimHei"

#解决负号不能正常显示的问题

plt.rcParams["axes.unicode_minus"] = False

#直接在jupyter notebook展示图片

%matplotlib inline

#作图使用svg格式更为清晰

%config InlineBackend.figure_format = "svg"

1.1 可视化伪代码

设置画布的大小:plt.figure(figsize = (x,y))

建立坐标系: add_subplot()、plt.subplot()、plt.subplots()

作图函数: plot、bar、scatter、barh、pie、boxplot

设置图表标题: plt.title()

设置x轴y轴标题: plt.x/ylabel()

设置x轴y轴刻度: plt.x/yticks()

设置x轴y轴范围: plt.x/ylims()

添加数据标签: plt.text()

添加注释: plt.annotate()

添加数据表格: plt.table()

添加图例: plt.legend()

展示结果: plt.show()

1.2 坐标系的建立

坐标系的建立方法有好几种,add_subplot()是面向对象的方法,也就是得先建立画布,然后在画布上建立坐标系,然后才能在坐标系上作图;而后两种(plt.subplot()、plt.subplots())属于函数式方法,是直接调用plt里面的函数建立的坐标系,区别在于plt.subplot()一次只建立指定的几个坐标系,而plt.subplots()是一次性全部坐标系都建立出来,比如:

# add_subplot(行,列,第几个)建立坐标系

import matplotlib.pyplot as plt

fig = plt.figure()

ax1 = fig.add_subplot(1,2,1)

ax2 = fig.add_subplot(1,2,2)

#plt.subplot(行,列,第几个)建立坐标系

plt.subplot(2,2,1)

plt.subplot(2,2,4)

#plt.subplots(行,列)建立坐标系

plt.subplots(1,2)

1.3 作图函数

作图函数包括很多,常用的有折线图plot,柱形图bar,条形图barh,饼图pie,散点图scatter,面积图stackplot,雷达图polar,热力图imshow等,这里先不具体介绍,等其他参数介绍完之后实例介绍。

1.4 图表的标题

图表的标题通过plt.title()设置,格式如下:

plt.title("xxxx",loc = "left/right/center",fontsize = x,color = x,fontwidth = x)

1.5 坐标轴设置

(1) 轴标题的设置:plt.xlabel/ylabel("xxxx",labelpad = x,fontsize = x,color = x,fontwidth = x)

(2) 坐标系范围:plt.xlim/ylim(x,y)

(3) 坐标轴的刻度:plt.xticks/yticks(range,labels = [])

1.6 附加元素

(1) 网格线设置:plt.grid(True,axis = "x/y",linestyle = x,linewidth = x);

不设定axes时,默认xy轴的网格线都打开;

linestyle表示线的风格,有实线(solid),虚线(dashed),线点(dashdot),虚点线(dotted)。

(2)数据标签的设置:plt.text(x,y,z,ha = "left/right/center",va = "top/bottom/center", fontsize = s,color = s);

ha表示水平的位置,va表示垂直的位置;

格式如下:

for a,b in zip(x,y):

plt.text(a,b,b,ha = xx,va = xx)

(3)注释:plt.annotate("xxx",xy = (x,y),xytext = (x,y),arrowprops = dict(arrowstyle = "x",facecolor = x));

arrowstyle表示注释的风格,常用的有"->","-]","-","","fancy"(头小尾大的箭头);

xy表示需要注释的位置,而xytext表示注释文本所在的位置。

(4)数据表格:plt.table(cellText,cellColours,cellLoc,rowLabels,rowColours,rowLoc,colLabels,colColours,colLoc,loc);

数据表格包含三要素,分别是数值,行和列,数值通过cellText设置,行列标签通过rowLabels和colLabels设置;

需要注意的是数值、行、列的颜色填充分别是cellColours,rowColours和colColours,若写成cellColors,程序会报错。

(5)图例的设置:plt.legend(ncol = x,loc = x);

ncol表示图列分为几列来显示,默认是一列。

1.7 折线图

折线图的格式如下:

plt.plot(x,y,linestyle = s,linewidth = s,color = s,marker = s,markersize = s,markeredgecolor = s, markeredgewidth = s,markerfacecolor = s,label);

marker表示点的风格:常用的有"+","o","*","s"(正方形),"p"(五边形),"h"(六边形),"d"(小菱形);

常用的颜色有:"b"(蓝色),"g"(绿色),"k"(黑色),"w"(白色),"r"(红色),"y"(黄色),"c"(青色),"m"(品红)。

import numpy as np

plt.subplot(1,1,1)

x = np.arange(10)

y = np.arange(10)

plt.plot(x,y,

linestyle = "dashdot",

linewidth = 2,

color = "c",

marker = "*",

markersize = 10,

markerfacecolor = "m",

markeredgecolor = "m",

label = "示例1")

plt.title("示例1",fontsize = 15,color = "k",loc = "center")

plt.xlabel("x轴")

plt.ylabel("y轴")

plt.grid(b = True,axis = "x",linestyle = "dashed")

for a,b in zip(x,y):

plt.text(a,b-0.5,b,va = "center",ha = "center")

plt.annotate("这是坐标xy都是5的位置",xy = (5,5),xytext=(6,4),arrowprops = dict(arrowstyle = "fancy",facecolor = "r"))

plt.legend()

1.8 柱形图与条形图

柱形图与条形图的原理相似,只是height跟width两个参数含义交换,这里只介绍柱形图。

柱形图的格式如下:plt.bar(x,height = s,width = s,color = s,edgecolor = s,align = center/edge);

align表示柱子与x的关系,center表示柱子位于x轴的中心,edge表示柱子位于x轴的边缘;

height表示柱子的高度,就是y值;

width表示柱子的宽度。

import numpy as np

x = np.arange(1,5)

y1 = np.arange(1,5)

y2 = np.arange(2,6)

plt.subplot(2,2,1)

plt.bar(x,

height = y1,

width = 0.3,

align = "center",

facecolor = "c")

for a,b in zip(x,y1):

plt.text(a,b,b,va = "center",ha = "center")

#簇状柱形图

plt.subplot(2,2,2)

plt.bar(x,

height = y1,

width = 0.3,

align = "center",

facecolor = "c",

label = "示例1")

plt.bar(x+0.3,

height = y2,

width = 0.3,

align = "center",

facecolor = "m",

label = "示例2")

for a,b in zip(x,y1):

plt.text(a,b,b,va = "center",ha = "center")

for a,b in zip(x,y2):

plt.text(a+0.3,b,b,va = "center",ha = "center")

plt.legend()

#堆积柱形图

plt.subplot(2,2,3)

plt.bar(x,

height = y1,

width = 0.3,

align = "center",

facecolor = "c",

label = "示例1")

plt.bar(x,

height = y2,

width = 0.3,

align = "center",

facecolor = "m",

label = "示例2")

for a,b in zip(x,y1):

plt.text(a,b,b,va = "center",ha = "center")

for a,b in zip(x,y2):

plt.text(a,b,b,va = "center",ha = "center")

plt.legend()

#堆积柱形图

plt.subplot(2,2,4)

plt.bar(x,

height = y2,

width = 0.3,

align = "center",

facecolor = "m",

label = "示例2")

plt.bar(x,

height = y1,

width = 0.3,

align = "center",

facecolor = "c",

label = "示例1")

for a,b in zip(x,y1):

plt.text(a,b,b,va = "bottom",ha = "center")

for a,b in zip(x,y2):

plt.text(a,b,b,va = "top",ha = "center")

plt.legend()

簇状柱形图的原理就是在同样的x值做不同的柱子时,第二个柱子往左或者往右移动一个柱子的宽度,如上图所示的0.3;

堆积柱形图的原理是只要是在相同的x值作不同的柱子时,柱子会自动叠加,这里需要注意的是更大的y值需要先作图,不然的话会像图3所示,正确的做法如图四所示,y2的值更大,所以先作图。

1.9 饼图

饼图的格式如下:plt.pie(x,explode = [],labels = [],autopct = s,pctdistance = s,radius = s,labeldistance = s, shadow = True/False,wedgeprops = dict(width = s,edgecolor = s),center = s, counterclock = True/False)

explode表示饼图中每一块离圆心的位置;

autopct表示数据标签中数值的百分比格式;

pctdistance表示数据标签距离圆心的距离;

radius表示饼图的半径;

labeldistance表示每一块图例离圆心的距离;

shadow表示是否有阴影;

wedgeprops表示每一块的边界属性;

center表示圆心的位置;

counterclock表示是否让饼图逆时针显示。

#饼图

plt.subplot(1,2,1)

x = [i**2 for i in np.arange(1,5)]

plt.pie(x,

explode= [0,0,0.2,0],

labels = ["东","南","西","北"],

colors = ["b","steelblue","c","g"],

autopct = "%.1f%%",

radius = 1,

pctdistance= 0.7,

labeldistance = 0.5,

shadow= True,

counterclock = False)

#圆环图

plt.subplot(1,2,2)

x = [i**2 for i in np.arange(1,5)]

plt.pie(x,

labels = ["东","南","西","北"],

radius = 1,

labeldistance = 1.2,

wedgeprops= dict(width = 0.3,edgecolor = "w"))

plt.pie(x,

radius = 0.8,

wedgeprops= dict(width = 0.3,edgecolor = "w"))

圆环图的原理就是设置不同的半径,然后通过设置边界的宽度与颜色来达到分离的效果。

1.10 散点图

散点图的格式如下:plt.scatter(x,y,marker = a,s = a,c = a,edgecolors = a,linewidths = a)

s表示散点的大小;

c表示散点的颜色;

edgecolors表示散点边缘的颜色;

linewidths表示散点的线宽。

# 散点图

x = np.arange(1,5)

y = [i**2 for i in x]

plt.subplot(1,2,1)

plt.scatter(x,

y,

marker = "d",

s = 200,

c = "c",

edgecolors = "m")

for a,b in zip(x,y):

plt.text(a,b,b,ha = "center",va = "center")

#气泡图

plt.subplot(1,2,2)

plt.scatter(x,

y,

marker = "o",

s = y*200, #根据y值设置散点的大小

c = y) #根据y值生成不同的颜色

for a,b in zip(x,y):

plt.text(a,b,b,ha = "center",va = "center")

你可能感兴趣的:(python簇状柱形图)