Matplotlib 是一个Python的2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。通过Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。
1.PyCharm下安装Matplotlib:在PyCharm最下方找到Terminal,双击打开并输入:pip install Matplotlib,进行Matplotlib库函数的安装。
2.Matplotlib 库函数安装完成,现在使用Matplotlib 库函数来绘制图形。
- 柱状图
# 正常显示中文字体
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
# 生成一张12*4的图
fig = plt.figure()
# 生成子图的位置
ax1 = fig.add_subplot()
# 柱状图数据
x1 = [0.2, 1.7, 3, 4, 5]
y1 = [5, 20, 15, 25, 10]
# 子图绘图和标注的设置
ax1.bar(x1, y1)
# width=2
ax1.set(xlabel='横坐标', ylabel='纵坐标', title='柱状图')
#显示
plt.show()
- plt.style.use('bmh') 它设置了柱形图的背景格式,除此之外还有许多其他格式,例如:
plt.style.use('dark_background')
plt.style.use('seaborn-ticks')
plt.style.use('ggplot')
- plt.rcParams['font.sans-serif'] ='SimHei':
#设置字体为SimHei显示中文;同时plt.rcParams还可以设置画图的分辨率,大小等信息。
,将生成的图片放大时,图片会变得模糊不清,
这是因为在默认情况的像素为:[6.0,4.0],分辨率为:100,图片尺寸为:600&400,可以通过plt.rcParams更改图片分辨率和图片像素。如图所示:
plt.rcParams['savefig.dpi'] = 800 #图片像素
plt.rcParams['figure.dpi'] =800 #分辨率
plt.rcParams不仅可以改变图片像素与分辨率还可以改变图片的大小:
plt.rcParams['figure.figsize'] = (8.0, 4.0)
Figure 1为未改变之前,Figure 2为设置plt.rcParams之后:
plt.figure():设置其中的参数,改变窗口的大小,背景颜色,边框颜色等:
fig=plt.figure(figsize=(4,3),facecolor="blue")
plt.subplots():如果只创建一个窗口,在subplots()中什么都不写
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot()
plt.show()
如果要创建多个窗口,subplots(“行”,“列”,“该图片所在二维空间的位置”)
ax = fig.add_subplot(121)
ax = fig.add_subplot(122)
一行两列的的一个位置
一行两列的的二个位置
ax = fig.add_subplot(221)
ax = fig.add_subplot(224)
# 柱状图数据
x1 = [0.2, 1.7, 3, 4, 5]
y1 = [5, 20, 15, 25, 10]
# 子图绘图和标注的设置
ax1.bar(x1, y1)
# width=2
ax1.set(xlabel='横坐标', ylabel='纵坐标', title='柱状图')
这段代码的数据不是随机生成而是写死的,一个X对应一个Y,如果数据出现个数不对应,会出现报错的情况;
ax1.set(xlabel='横坐标', ylabel='纵坐标', title='柱状图')
xlabel:设置横坐标的标注
ylabel:设置纵坐标的标注
title:设置图形标题
同时在set中还能够对横纵坐标轴的范围进行设置,规定让其在设定的范围之内,不单单限制在我们所输入数据的最大值和最小值之间。
ax1.set(xlim=(-5, 9), xticks=np.arange(-5, 9),#
xlim 设置X轴限制,xticks设置X轴刻度
ylim=(-5, 9), yticks=np.arange(-5, 9))
ax1.bar(x1, y1):根据x1和y1的参数绘制柱形图
bar:柱形图
ax1.plot(x1, y1):根据x1和y1的参数绘制折线图
plot:折线图
ax1.scatter(x1, y1):根据x1和y1的参数绘制散点图
scatter:散点图
2.折线图
3) #导入Matplotlib库函数
import matplotlib.pyplot as plt
import numpy as np
# 设置背景格式
plt.style.use('bmh')
# 正常显示中文字体
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']
# plt.rcParams['figure.figsize'] = (8.0, 4.0) # 设置figure_size尺寸
plt.rcParams['savefig.dpi'] = 800 #图片像素
plt.rcParams['figure.dpi'] =800 #分辨率
fig = plt.figure()
# 生成子图的位置
ax1 = fig.add_subplot()
# 折线图数据
x1 = [0.2, 1.7, 3, 4, 5]
y1 = [5, 20, 15, 22, 10]
x2 = np.arange(0, 5)
y2 = [25, 2, 12, 30, 20]
ax1.plot(x1, y1, marker='*', ls='--', lw=3,ms=10 )
# 折线图 marker:标记形状;ms:标记的大小;ls:连接样式;
# lw:折线的粗细;c:折线的颜色
ax1.plot(x2,y2,marker='o',c='#992211', ms=10 )
ax1.set(xlabel='横坐标', ylabel='纵坐标', title='折线图')
plt.show()
折线图的背景,窗口,横纵坐标设置与柱形图大同小异;折线图与柱形图的不同之处,可以设置折线的类型,折线标记的记号等。
- 颜色
plot方法的关键字参数color(或c)用来设置线的颜色。可取值为:颜色名称或简写:
b: blue
g: green
r: red
c: cyan
m: magenta
y: yellow
k: black
w: white
或者以#rrggbb格式:(r, g, b) 或 (r, g, b, a),其中 r g b a 取均为[0, 1]之间,[0, 1]之间的浮点数的字符串形式,表示灰度值。0表示黑色,1表示白色
2.样式
plot方法的关键字参数linestyle(或ls)用来设置线的样式。可取值为:
- -, solid
- --, dashed
- -., dashdot
- :, dotted
- '', ' ', None
3.线条粗细
设置plot方法的关键字参数linewidth(或lw)可以改变线的粗细,其值为浮点数。
ax1.plot(x1, y1, marker='*', ls='--', lw=3,ms=10 )
# 折线图 marker:标记形状;ms:标记的大小;ls:连接样式;
# lw:折线的粗细;c:折线的颜色
ax1.plot(x2,y2,marker='o',c='#992211', ms=10 )
3.直方图:又称质量分布图,是一种统计报告图,由一系列高度不等的纵条或线段表示数据分布情况。用横轴表示数据类型,纵轴表示分布情况。直方图是数值数据分布的精确图形表示。绘制连续性的数据,展示一组或多组数据的分布状况。
直方图的绘制和条形图有些相似,需要把plt.bar()修改成plt.hist(),更改图形的拟合方式,即可绘制直方图。
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(19680801)
# example data
mu = 100 # mean of distribution
sigma = 15 # standard deviation of distribution
x = mu + sigma * np.random.randn(437)
num_bins = 50 #组距
fig, ax = plt.subplots()
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
# 柱状图
# bins 将数据做 分箱 处理,然后统计每个箱内观察值的数量
# 选择出一个合适的区间(箱)宽度,并生成一个最能代表数据的直方图
# n, bins, patches = ax.hist(x, num_bins, density=True)
n, bins, patches = plt.hist(x, num_bins, facecolor='blue', alpha=0.5,density=True)
# 直方图函数,x为x轴的值,
# 绿色方块,色深参数0.5.返回n个概率,直方块左边线的x值,及各个方块对象
# 设置参数density=True实现数量的频率化,(趋势图)
y = ((1 / (np.sqrt(2 * np.pi) * sigma)) *
np.exp(-0.5 * (1 / sigma * (bins - mu))**2)) #组数=极差/组距
ax.plot(bins, y, '--')
ax.set_xlabel('横坐标')
ax.set_ylabel('纵坐标')
ax.set_title('直方图')
fig.tight_layout()
plt.show()
改变bins组距,同时去掉density参数:
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(19680801)
# example data
mu = 100 # mean of distribution
sigma = 15 # standard deviation of distribution
x = mu + sigma * np.random.randn(437)
num_bins = 10 #组距
fig, ax = plt.subplots()
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
# 柱状图
# bins 将数据做 分箱 处理,然后统计每个箱内观察值的数量
y = ((1 / (np.sqrt(2 * np.pi) * sigma)) *
np.exp(-0.5 * (1 / sigma * (bins - mu))**2)) #组数=极差/组距
ax.plot(bins, y, '--')
ax.set_xlabel('横坐标')
ax.set_ylabel('纵坐标')
ax.set_title('直方图')
fig.tight_layout()
plt.show()
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 的直方图。如果输入包含多个数据,则返回值为元组(n,bins,patches)或([n0,n1,...],bins,[patch0,patch1,...])。
可以通过 x 提供多个数据作为可能不同长度的数据集列表([x0, x1, ...]),或者作为 2D ndarray 提供,其中每列都是一个数据集。请注意,ndarray 形式相对于列表形式是转置的。
不支持屏蔽数组。
条柱、范围、权重和密度参数的行为与 numpy.histogram 中的行为相同。
参数:
x(n,) 数组或 (n,) 数组序列
输入值,这将采用单个数组或不需要相同长度的数组序列。
binsint 或 sequence 或 str,默认值:rcParams[“hist.bins”](默认值:10)
如果条柱是整数,则定义区域中等宽条柱的数量。
如果条柱是一个序列,则定义条柱边缘,包括第一个条柱的左边缘和最后一个条柱的右边缘;在这种情况下,条柱的间距可能不相等。除了最后一个(最右边的)垃圾箱外,其他所有垃圾箱都是半开的。换句话说,如果条柱是:
[1, 2, 3, 4]
则第一个箱是(包括 1,但不包括 2)和第二个 。但是,最后一个箱是 ,其中包括 4。[1, 2)[2, 3)[3, 4]
如果 bins 是一个字符串,它是numpy.histogram_bin_edges支持的分箱策略之一:“auto”、“fd”、“doane”、“scott”、“stone”、“rice”、“sturges”或“sqrt”。
range:tuple or None,默认值:无
箱的下限和上限范围。下限和上限异常值将被忽略。如果未提供,则范围为 。如果条柱是序列,则范围不起作用。(x.min(), x.max())
如果 bins 是指定的序列或范围,则自动缩放基于指定的 bin 范围,而不是 x 的范围。
Density:布尔,默认值:False
如果 绘制并返回概率密度:每个条柱将显示条柱的原始计数除以计数总数和条柱宽度 (),以便直方图下的区域积分为 1 ()。Truedensity = counts / (sum(counts) * np.diff(bins))np.sum(density * np.diff(bins)) == 1
Weights: weights(n,) 数组或无,默认值:无
与 x 形状相同的权重数组。x 中的每个值仅将其关联的权重贡献给条柱计数(而不是 1)。如果密度为 ,则权重被归一化,因此密度在该范围内的积分保持为 1。True
此参数可用于绘制已装箱数据的直方图,例如使用numpy.histogram(通过将每个箱体视为权重等于其计数的单个点)
counts, bins = np.histogram(data)
plt.hist(bins[:-1], bins, weights=counts)
cumulative:布尔或 -1,默认值:False
如果 为 True,则计算直方图,其中每个条柱给出该条柱中的计数加上较小值的所有条柱。最后一个箱提供数据点的总数。
如果密度也是True,则直方图将归一化,使得最后一个条柱等于 1。
如果累积数小于 0(例如 -1),则累积方向相反。在这种情况下,如果密度也是True ,则直方图被归一化,使得第一个条柱等于 1。
Bottom:array-like, scalar, or Non,默认值:无
每个箱的底部的位置,即。从中绘制条柱,如果为标量,则每个条柱的底部移动相同的量。如果是数组,则每个条柱独立移动,底部的长度必须与条柱数匹配。如果为“无”,则默认为 0。bottombottom + hist(x, bins)
histtype{'bar', 'barstacked', 'step', 'stepfilled'}, default: 'bar'
要绘制的直方图的类型。
- “柱线”是传统的柱线型直方图。如果给出了多个数据,则条形将并排排列。
- “条形图”是一种条形图型直方图,其中多个数据堆叠在一起。
- “step”生成一个默认情况下未填充的行图。
- “步进填充”生成默认填充的行图。
align{'left', 'mid', 'right'}, default: 'mid'
直方图条的水平对齐方式。
- “左”:条形图位于左侧素材箱边缘的中心。
- “中”:条形图位于条柱边缘之间居中。
- “右”:条形图位于右侧条柱边缘的中心。
方向{'垂直', '水平'}, 默认值: '垂直'
如果为“水平”,则 barh 将用于条形直方图,底部 kwarg 将是左边缘。
rwidthfloat 或 None,默认值:无
条形的相对宽度作为条柱宽度的一小部分。如果 ,则自动计算宽度。None
如果 histtype 是“step”或“stepfilled”,则忽略。
logbool,默认值:False
如果 为True ,直方图轴将设置为对数刻度。
Color:颜色或类似数组的颜色或无,默认值:无
颜色或颜色序列,每个数据集一个。缺省 () 使用标准线颜色序列。None
labelstr 或 None,默认值:无
字符串或字符串序列以匹配多个数据集。条形图为每个数据集生成多个补丁,但只有第一个获得标签,因此该图例将按预期工作。
Stacked:布尔,默认值:False
如果 True,则多个数据堆叠在一起 如果 是False,则多个数据并排排列;如果 histtype 是 “step” ,则多个数据彼此堆叠在一起
binsarray
条柱的边缘。长度 nbins + 1(nbin 为最后一个条柱的左边缘和右边缘)。即使传入多个数据集,也始终为单个数组。
patchbarContainer 或单个多边形的列表或此类对象的列表
用于创建直方图的单个艺术家的容器或此类容器的列表(如果有多个输入数据集)。
官网文献:
matplotlib.axes.Axes.hist — Matplotlib 3.5.2 documentation
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)