目录
1.2 使用 plt.axes() plt.axis() 修改(需要详细)
1 先辨析常规的图类型
1.1 图形类型
- 折线图 plot
- 散点图 sactter
- 饼图 pei
- 柱状图:bar
- 一般对不同类型的变量,进行数值比较。
- 长方形柱体的含义:高度代表每个分类的数值多少,显示的是值/绝对值
- 一般每个长方体之间有间隔
- 主要目标:弄清楚不同类型之间的 绝对值比较
- 一般是离散的
- 直方图:hist
- 容易和柱状图搞混
- 又称为,密度分布图 / 质量分布图 /
- 可以成为 权重分布图,但不能是概率分布图(因为没有归一)
- 一般是对同一类型的变量比较分布的差异
- 长方形柱体的含义:高度代表(落入)每个区间的比例差别,显示的是 量/比例/权重
- 主要目标:弄清楚各个区间的分布情况
- 一般长方形之间没有间隔
- 一般是连续的
- 等高线图
- 热力图
1.2 使用 plt.axes() plt.axis() 修改(需要详细)
- plt.axes() 设置的是 子区域
- plt.axis() 设置的是 坐标轴
- plt.axis([0,6,0,12])
- line = plt.plot(x,y)
plt.setp(line,color='g',linewidth=5) - plt.setp(line1,linewidth=1)
- 这种特殊的修改办法
2 折线图 plt.plot()
2.1 基本语法
- plt.plot(x对应自变量:一般对应X轴, y对应因变量:一般对应y轴)
- plt.plot(x, y, linestyle, linewidth,color,marker, markersize, markeredgecolor, markerfactcolor, label, alpha)
- 详细见之前的文章
2.2 一些枚举信息的查询
plt.plot(x,
np.cos(x),
color = 'r', # 线条颜色
linewidth = 2, # 线条宽度
linestyle='-.', # 线的类型:虚线:'--',点线:'-.',短虚线':',实线:'-'
marker='*', # 线上点的形状
markersize = 5, # 点的大小
markeredgecolor = 'b', # 点的边框颜色
markerfacecolor ='green', # 点的背景颜色,可能因为点太小没显示出来?
label = 'cos', # 图例
alpha = 1 ) # 透明度:0-1之间 ,默认1
- color ,可以用简写的颜色"w",也可以用RGB颜色 "#ffcb4a"
字符 | 颜色 |
‘b’ | 蓝色,blue |
‘g’ | 绿色,green |
‘r’ | 红色,red |
‘c’ | 青色,cyan |
‘m’ | 品红,magenta |
‘y’ | 黄色,yellow |
‘k’ | 黑色,black |
‘w’ | 白色,white |
- linestyle='-.' 和 marker='*',,可用的图形如下
字符 | 类型 | 字符 | 类型 |
‘-’ | 实线 | ’–‘ | 虚线 |
’-.‘ | 虚点线 | ‘:’ | 点线 |
‘.’ | 点 | ‘,’ | 像素点 |
‘o’ | 圆点 | ’_’ | 横线点 |
’^‘ | 上三角点 | ‘<’ | 左三角点 |
‘>’ | 右三角点 | ‘1’ | 下三叉点 |
‘2’ | 上三叉点 | ’3‘ | 左三叉点 |
’4‘ | 右三叉点 | ‘s’ | 正方点 |
‘p’ | 五角点 | ‘*’ | 星形点 |
‘h’ | 六边形点1 | ’H’ | 六边形2 |
’+‘ | 加号点 | ‘x’ | 乘号点 |
‘D’ | 实心菱形点 | ‘d’ | 瘦菱形点 |
2.3 测试代码
- 当plt.plot() 里只有1组数据时作为1个变量时,会默认为是Y
- 当plt.plot() 里有2组数据时作为2个变量时,会默认前面的是X,后面的为Y
import numpy as np
import matplotlib.pyplot as plt
plt.figure(figsize=(3,3))
plt.plot([2,4,6,8,10])
plt.show()
2.4 测试代码:plt.figure() 的一些简便写法
plt.figure() 的一些简便写法
- #可以不设置画布 plt.figure() #fig=plt.figure(figsize(3,3))
- plt.plot(x,y,"r+") # "r+"这样可以同时设置,颜色+线外观
- plt.axis([0,6,0,12]) # "r+"这样可以同时设置2个坐标轴的范围,相当于 plt.xlmit() 和 plt.ylmit()
import numpy as np
import matplotlib.pyplot as plt
#fig=plt.figure(figsize(3,3))
plt.plot([1,2,3,4,5],[2,4,6,8,10],"r+")
plt.axis([0,6,0,12])
plt.show()
2.5 测试代码:用plt.plot() 同时画多条折线
- lines = plt.plot(x1,y1,x2,y2,x3,y3)
- plt.plot(x,x**1,"b+",x,x**2,"gp",x,x**3,"r^",)
- 可以同时画多条曲线
import numpy as np
import matplotlib.pyplot as plt
x=np.linspace(1,10,50)
plt.figure(figsize=(5,5))
plt.plot(x,x**1,"b+",x,x**2,"gp",x,x**3,"r^")
line1,line2,line3=plt.plot(x,x**1,"b-",x,x**2,"g-",x,x**3,"r-")
plt.setp(line1,linewidth=1)
plt.setp(line2,linewidth=2)
plt.setp(line3,linewidth=3)
plt.show()
3 散点图 plt.sactter()
3.1 散点图语法
散点图指通过对应坐标确定位置并绘制坐标点的图表。通过观察坐标点的分布,我们可以知道变量间是否存在关系或者数据的分布是否符合某种模式。我们可以通过 plt.scatter() 函数绘制散点图。标准的 scatter() 函数格式如下:
scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, *, edgecolors=None, plotnonfinite=False, data=None, **kwargs)
这里我们介绍几个最常用的参数:
x: 数据点的横坐标
y: 数据点的纵坐标
s: 数据点的大小
c: 数据点的颜色
marker: 数据点的样式
scatter函数参数详解
https://blog.csdn.net/orangefly0214/article/details/78725328
plt中cmap的值
https://www.csdn.net/tags/MtjaYgysNzQ4NzctYmxvZwO0O0OO0O0O.html
3.2 测试代码
import numpy as np
import matplotlib.pyplot as plt
# 散点图
# x, y
x = np.random.normal(0, 1, 20)
y = np.random.normal(0, 1, 20)
# 绘制散点图
plt.scatter(x, y, s=25, alpha=0.75)
plt.xlabel("X")
plt.ylabel("Y")
# 显示图像
plt.show()
4 柱状图 plt.bar()
4.1 基础语法
4.2 测试代码
import numpy as np
import matplotlib.pyplot as plt
# 直方图
# x, y
size = 12
x = np.arange(size)
y = np.random.uniform(0, 1, size) * 10
# 直方图
plt.bar(x, y, edgecolor="white")
plt.bar(x, -y, facecolor="#999999", edgecolor="white")
# 设置坐标
plt.xticks(x)
plt.yticks(np.linspace(-12, 12, 13))
# 显示数值
for (X, Y) in zip(x, y):
plt.text(x=X, y=Y+0.2, s="%.1f" % Y, ha="center")
print(X, Y)
# 显示图像
plt.show()
ax2=plt.subplot(122)
#创建ax2图的对象
rects = ax2.bar(x_bar,data,width=width,label='进阶的bar',color='red')
for rect in rects:
#获取x轴的数据
x_val = rect.get_x()
#获取y轴的值
y_val = rect.get_height()
ax2.text(x_val+0.08,y_val+0.2,str(y_val)+'W')
plt.xlabel('季度')
plt.ylabel('销量')
plt.legend()
plt.show()
5 饼图 plt.pie()
函数原型:
pie(x,explode=None,labels=None,colors=None,autopct=None,pctdistance=0.6,shadow=False,labeldistance=1.1,startangle=None,radius=None)
参数解释:
x——
labels——饼图外侧显示的说明文字
explode——每一块离中心的距离
startangle——起始绘制角度,默认是从x轴方向逆时针画起,若设置=90咋就说从y轴正方向画起
shadow——是否有阴影
labeldistance——labei绘制的位置,相对于半径的比例,如<1则绘制在饼图内侧
autopct——控制饼图内百分比设置,可以使用format字符串或者format function %1.1f指的是小数点前后位数(没有用空格补齐)
pctdistance——类似于labeldistance,指定autopct的位置刻度
radius——控制圆的半径
6 直方图 plt.hist()
直方图(Histogram)又称质量分布图。是一种统计报告图,由一系列高度不等的纵向条纹或线段表示数据分布的情况。一般用横轴表示数据类型,纵轴表示分布情况。
直方图是数值数据分布的精确图形表示。这是一个连续变量(定量变量)的概率分布的估计,并且被卡尔·皮尔逊(Kar Pearson)首先引入。
hist的参数非常多,但常用的就这六个,只有第一个是必须的,后面可选
arr:需要计算直方图的一维数组
bins:直方图的柱数,可选项,默认为10
normed:是否将得到的直方图向量归一化。默认为0
facecolor:直方图颜色
edgecolor:直方图边框颜色
alpha:透明度
histtype:直方图类型,‘bar’ , ‘barstacked’ , ‘step’ , ‘stepfilled’
import numpy as np
import matplotlib.pyplot as plt
x=np.linspace(1,10,20)
plt.figure(figsize=(5,5))
bar3=plt.bar(x,x**2)
plt.show()
5 直方图 plt.hist()
- 直方图(Histogram)又称质量分布图。是一种统计报告图,由一系列高度不等的纵向条纹或线段表示数据分布的情况。
- 因此其中组距、组数起关键作用。分组过少,数据就非常集中;分组过多,数据就非常分散,这就掩盖了分布的特征。当数据在100以内时,一般分5~12组为宜
- 一般表示同一种数据类型的,具体数值分布,比如概率p
- 一般用横轴表示数据类型,纵轴表示分布情况。
- 直方图是数值数据分布的精确图形表示。这是一个连续变量(定量变量)的概率分布的估计,并且被卡尔·皮尔逊(Kar Pearson)首先引入。
可以很好的展示数据分布情况的图表。通常用横轴表示数据范围,纵轴表示分布情况。正态分布通常就是以直方图的形式展示出来。绘制直方图可以通过 plt.hist() 函数实现。标准的 hist() 函数格式如下:
hist(x, bins=None, range=None, density=False, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, *, data=None, **kwargs)
常用参数解释:
x: 输入数据
bins: 直方图的长条形数量
histtype: 直方图类型,包括 'bar', 'barstacked', 'step', 'stepfilled'
假设我们有如下数据和参数:
mu,sigma = 150,40
data = np.random.normal(mu,sigma,size=100).1,0)
此时我们可以通过如下方式绘制饼状图:
plt.hist(data, bins=20)
基本语法
plt.hist(population_ages,bins,label='直方图')
hist的参数非常多,但常用的就这六个,只有第一个是必须的,后面可选
- arr:需要计算直方图的一维数组
- bins:直方图的柱数,可选项,默认为10
- normed:是否将得到的直方图向量归一化。默认为0
- facecolor:直方图颜色
- edgecolor:直方图边框颜色
- alpha:透明度
- histtype:直方图类型,‘bar’ , ‘barstacked’ , ‘step’ , ‘stepfilled’
返回值:
- n:直方图向量,是否归一化由参数normed设定
- bins:返回各个bin的区间范围
- patches:返回每个bin里面包含的数据,是一个list.
import numpy as np
import matplotlib.pyplot as plt
x=np.linspace(1,10,20)
plt.figure(figsize=(5,5))
hist3=plt.hist(x,x**2)
plt.show()
import numpy as np
import matplotlib.pyplot as plt
population_ages =[11,22,31,42,55,102,122,130,97,111,75,65,43]
# 分组
bins= [0,20,40,60,80,100,120,140]
plt.hist(population_ages,bins,label='直方图')
plt.xlabel('x轴')
plt.ylabel('y轴')
plt.title('直方图')
plt.legend()
plt.show()
6 饼图
通过扇形的圆心角度数来表示某类数据占总数据的百分比。绘制饼状图通常我们会通过 plt.pie() 函数进行绘制。标准的 pie() 函数格式如下:
pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=0, radius=1, counterclock=True, wedgeprops=None, textprops=None, center=0, 0, frame=False, rotatelabels=False, *, normalize=None, data=None)
常用参数解释:
x: 输入数据
explode: 某个 label 的突出程度
labels: 每一类数据的标签
colors: 每一类数据的颜色
假设我们有如下数据和参数:
labels = ['cat','dog','bird','fish']
sizes = [10,30,50,10]
colors = ['red','yellow','lightskyblue','green']
explode = (0,0,0.1,0)
此时我们可以通过如下方式绘制饼状图:
plt.pie(sizes, explode=explode, labels=labels, colors=colors)
7
水平柱状图
常见的柱状图 X 轴水平,Y 轴垂直。有时候我们需要将两个轴反过来,这时候就可以使用 plt.barh() 函数绘制水平柱状图。标准 barh() 函数的格式如下:
barh(y, width, height=0.8, left=None, *, align='center', **kwargs)
水平柱状图的参数和柱状图基本一致,区别是 X 轴和 Y 轴互换。
完整的 API 描述可以参考[object Object]的官方文档。
假设我们有如下数据和参数:
# 生成第一组数据
num_list1=[20,30,15,35]
y_1 = [1., 2., 3., 4.]
# 生成第二组数据,注意这里的值设置为 y+height 为宜
num_list2=[15,30,40,20]
y_2 = [1.4, 2.4, 3.4, 4.4]
此时我们可以通过如下方式绘制饼状图:
rects1 = plt.barh(y_1,height=0.4,width=num_list1,color='red',label='height')
rects2 = plt.barh(y_2,height=0.4,width=num_list2,color='blue',label='weight')
plt.legend()