bar
(绘制柱形图)import matplotlib as mpl
import matplotlib.pyplot as plt
import random
import string
def test():
# 设置字体为黑体
mpl.rcParams['font.family'] = 'SimHei'
# 设置在中文字体是能够正常显示负号(“-”)
mpl.rcParams['axes.unicode_minus'] = False
x = [i for i in range(1, 9)]
y = [random.choice(x) for i in range(8)]
plt.bar(x,
y,
align="center",
color="c",
tick_label=[random.choice(string.ascii_lowercase) for i in range(8)],
hatch="/")
plt.xlabel('箱子编号')
plt.ylabel('箱子重量(kg)')
plt.show()
matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)
https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.bar.html?highlight=bar#matplotlib.pyplot.bar
制作条形图。
使用给定的 alignment 将条形定位在 x。 它们的尺寸由 height 和 width 给出。 垂直基线是 bottom(默认 0)。
许多参数可以采用单个值应用于所有条形或一系列值,每个条形一个值。
参数:
x
: float or array-like
条形的 x 坐标。 另请参阅 align 以了解条形与坐标的对齐方式。
height
: float or array-like
条的高度。
width
: float or array-like, default: 0.8
条的宽度。
bottom
: float or array-like, default: 0
条形底的 y 坐标。
align
: {'center', 'edge'}, default: 'center'
条形图与 x 坐标的对齐:
要对齐右边缘的条形,请传递负 width 和 align='edge'
。
barh
(绘制条形图)import matplotlib as mpl
import matplotlib.pyplot as plt
import random
import string
def test():
# 设置字体为黑体
mpl.rcParams['font.family'] = 'SimHei'
# 设置在中文字体是能够正常显示负号(“-”)
mpl.rcParams['axes.unicode_minus'] = False
x = [i for i in range(1, 9)]
y = [random.choice(x) for i in range(8)]
plt.barh(x,
y,
align="center",
color="c",
tick_label=[random.choice(string.ascii_lowercase) for i in range(8)],
hatch="/")
plt.xlabel('箱子重量(kg)')
plt.ylabel('箱子编号')
plt.show()
matplotlib.pyplot.barh(y, width, height=0.8, left=None, *, align='center', **kwargs)
https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.barh.html
hist
(绘制直方图)import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
def test():
# 设置字体为黑体
mpl.rcParams['font.family'] = 'SimHei'
# 设置在中文字体是能够正常显示负号(“-”)
mpl.rcParams['axes.unicode_minus'] = False
box_weight = np.random.randint(0, 10, 100)
x = box_weight
bins = range(11)
plt.hist(x,
bins=bins,
color="g",
histtype="bar",
rwidth=1,
alpha=0.6)
plt.xlabel('箱子重量(kg)')
plt.ylabel('销售数量')
plt.show()
matplotlib.pyplot.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)
https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.hist.html?highlight=hist#matplotlib.pyplot.hist
绘制直方图。
计算并绘制 x 的直方图。 返回值是一个元组 (n, bins, patches) 或 ([n0, n1, …], bins, [patches0, patches1, … .]) 如果输入包含多个数据。 请参阅 weights 参数的文档以绘制已分箱数据的直方图。
多个数据可以通过 x 作为可能不同长度的数据集列表 ([x0, x1, …]) 提供,或者作为每列是一个数据集的 2D ndarray 提供。 请注意,ndarray 形式相对于列表形式进行了转置。
不支持掩码数组。
bins、range、weights 和 density 参数的行为类似于 [numpy.histogram
](https://numpy.org/doc/stable/reference/generated/numpy.histogram.html #numpy.histogram)。
参数:
x
: (n,) array or sequence of (n,) arrays
输入值,这需要单个数组或不需要具有相同长度的数组序列。(这个数据是被统计频次的数据)
bins
: int or sequence or str, default: rcParams["hist.bins"] (default:
10)
如果 bins 是一个整数,它定义了范围内等宽 bin 的数量。
如果bins是一个序列,它定义了bin边缘,包括第一个bin的左边缘和最后一个bin的右边缘; 在这种情况下,bin
的间距可能不相等。 除了最后一个(最右边的)bin
外,所有bin
都是半开的(左开右闭的区间)。 换句话说,如果 bins 是:
[1, 2, 3, 4]
那么第一个 bin 是 [1, 2)
(包括 1,但不包括 2)和第二个 [2, 3)
。 然而,最后一个 bin 是 [3, 4]
,它包括 4。
如果 bins 是一个字符串,它是 numpy.histogram_bin_edges
支持的分箱策略之一 ): ‘auto’、‘fd’、‘doane’、‘scott’、‘stone’、‘rice’、‘sturges’ 或 ‘sqrt’。
range
: tuple or None, default: None
bin 的下限和上限范围。 忽略上下异常值。 如果未提供,range 为 (x.min(), x.max())
。 如果 bins 是一个序列,则范围无效。
如果 bins 是一个序列或指定了 range,则自动缩放基于指定的 bin 范围而不是 x 的范围。
density
: bool, default: False
如果为True
,则绘制并返回概率密度:每个 bin 将显示 bin 的原始计数除以计数总数 和 bin 宽度 (density = counts / (sum(counts) * np.diff(bins ))
),使得直方图下的面积积分为 1 (np.sum(density * np.diff(bins)) == 1
)。
如果 stacked 也是 True
,则直方图的总和归一化为 1。
weights
: (n,) array-like or None, default: None
与 x 形状相同的权重数组。 x 中的每个值仅将其相关权重贡献给 bin 计数(而不是 1)。 如果 density 为 True
,则权重被归一化,因此密度在该范围内的积分保持为 1。
此参数可用于绘制已分箱数据的直方图,例如 使用 numpy.histogram
(通过将每个 bin 视为单个点,其权重等于其 数数)
counts, bins = np.histogram(data)
plt.hist(bins[:-1], bins, weights=counts)
(或者您也可以使用 bar()
)。
cumulative
: bool or -1, default: False
如果True
,则计算直方图,其中每个 bin 给出该 bin 中的计数加上所有 bin 的较小值。 最后一个 bin 给出了数据点的总数。
如果 density 也是 True
,则直方图被归一化,使得最后一个 bin 等于 1。
如果 cumulative 是小于 0 的数字(例如 -1),则累积的方向相反。 在这种情况下,如果 density 也是 True
,则直方图被归一化,使得第一个 bin 等于 1。
bottom
: array-like, scalar, or None, default: None
每个箱子底部的位置,即。 bin 从 bottom
绘制到 bottom + hist(x, bins)
如果是标量,则每个 bin 的底部移动相同的量。 如果是数组,则每个 bin 都会独立移动,并且底部的长度必须与 bin 的数量相匹配。 如果没有,默认为 0。
histtype
: {'bar', 'barstacked', 'step', 'stepfilled'}, default: 'bar'
bar
是传统的条形直方图。 如果给出多个数据,则条形图并排排列。barstacked
是条形直方图,其中多个数据堆叠在一起。step
生成默认未填充的线图。stepfilled
生成一个默认填充的线图。align
: {'left', 'mid', 'right'}, default: 'mid'
orientation
: {'vertical', 'horizontal'}, default: 'vertical'
如果是“水平”,则 barh
将用于 bar 类型 histograms 和 bottom kwarg 将是左边缘。
rwidth
: float or None, default: None
条的相对宽度,作为 bin 宽度的一部分。 如果为“无”,则自动计算宽度。
如果 histtype 是 ‘step’ 或 ‘stepfilled’ 则忽略。
rwidth=0.8的效果
log
: bool, default: False
如果为True
,直方图轴将设置为对数刻度。
color
: color or array-like of colors or None, default: None
颜色或颜色序列,每个数据集一个。 默认 (None
) 使用标准线条颜色序列。
label
: str or None, default: None
字符串或字符串序列以匹配多个数据集。 条形图为每个数据集生成多个补丁,但只有第一个获得标签,因此 [legend
](https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.legend.html#matplotlib. axes.Axes.legend) 将按预期工作。
stacked
: bool, default: False
如果为True
,则多个数据相互堆叠如果为False
,则如果 histtype
为bar
,则多个数据并排排列,如果 histtype
为step
,则多个数据相互叠加
pie
(绘制饼图)import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
def test():
# 设置字体为黑体
mpl.rcParams['font.family'] = 'SimHei'
# 设置在中文字体是能够正常显示负号(“-”)
mpl.rcParams['axes.unicode_minus'] = False
# 这个tuple类型
kinds = "简易箱", "保温箱", "行李箱", "密封箱"
colors = ['#e41a1c', '#377eb8', '#4daf4a', '#984ea3']
soldNums = [0.05, 0.45, 0.15, 0.35]
plt.pie(soldNums,
labels=kinds,
autopct="%3.1f%%",
startangle=60,
colors=colors)
plt.title("不同类型的箱子的销售数量占比")
plt.show()
matplotlib.pyplot.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=True, data=None)
https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.pie.html?highlight=pie#matplotlib.pyplot.pie
绘制饼图。
制作数组 x 的饼图。 每个楔形的小数面积由x/sum(x)
给出。 如果 sum(x) < 1
,则 x 的值直接给出小数面积,数组不会被归一化。 生成的饼图将有一个大小为1 - sum(x)
的空楔形。
楔形按逆时针方向绘制,默认从 x 轴开始。
参数:
x
:1D array-like
楔形大小。(给的是累加和等于1的list)
explode
: array-like, default: None
如果不是 None,则为 len(x)
数组,它指定偏移每个楔形的半径分数。
labels
: list, default: None
为每个楔形提供标签的字符串序列(元组和list都可以)
colors
: array-like, default: None
饼图将循环使用的一系列颜色。 如果 None,将使用当前活动循环中的颜色(这个应该是有一套自己的默认颜色组合)。
autopct
: None or str or callable, default: None
如果不是 None,是一个字符串或函数,用于用它们的数值标记楔形。 标签将放置在楔形内。 如果它是格式字符串,则标签将为 fmt % pct
。 如果它是一个函数,它将被调用。
autopct="%4.2f%%"
4表示显示数字的最大位数
2表示小数点保留几位小数
%表示百分比计算
pctdistance
: float, default: 0.6
每个饼图的中心与 autopct 生成的文本的开头之间的比率。 如果 autopct 为 None,则忽略。
shadow
: bool, default: False
在馅饼下面画一个阴影。
normalize
: bool, default: True
当 True 时,总是通过标准化 x 来制作一个完整的饼图,以便 sum(x) == 1
。 False 如果 sum(x) <= 1
则制作部分饼图,并为 sum( x) > 1
。
labeldistance
: float or None, default: 1.1
绘制饼图标签的径向距离。 如果设置为 None
,标签不会被绘制,但会存储在 legend()
中使用
startangle
: float, default: 0 degrees
饼图起点从 x 轴逆时针旋转的角度。
radius
:float, default: 1
饼的半径。
counterclock
: bool, default: True
指定分数方向,顺时针或逆时针。
wedgeprops
: dict, default: None
传递给制作馅饼的楔形对象的参数字典。 例如,您可以传入 wedgeprops = {'linewidth': 3}
来设置楔形边框线的宽度等于 3。有关更多详细信息,请查看楔形对象的文档/参数。 默认情况下 clip_on=False
。
textprops
: dict, default: None
传递给文本对象的参数字典。
center
: (float, float), default: (0, 0)
图表中心的坐标。
frame
: bool, default: False
如果为真,则使用图表绘制轴框。
rotatelabels
: bool, default: False
如果为真,则将每个标签旋转到相应切片的角度。
data
: indexable object, optional
如果给定,以下参数也接受字符串 s
,它被解释为 data[s]
(除非这引发异常):x, explode, labels, colors
polar
(绘制极线图)import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
def test():
# 设置字体为黑体
mpl.rcParams['font.family'] = 'SimHei'
# 设置在中文字体是能够正常显示负号(“-”)
mpl.rcParams['axes.unicode_minus'] = False
# 这个tuple类型
barSlices = 12
# 在0-2π均匀取12个值
theta = np.linspace(0.0, 2*np.pi, barSlices, endpoint=False)
# 生成 30*[0.1) 12个一维数组
r = 30 * np.random.rand(barSlices)
# chartreuse 是一种淡绿色
plt.polar(theta, r, color="chartreuse", linewidth=2, marker='*', mfc="b", ms=10)
plt.title("极线图")
plt.show()
matplotlib.pyplot.polar(*args, **kwargs)
制作一个极坐标图。
调用签名:
polar(theta, r, **kwargs)
支持多个 theta、r 参数,带有格式字符串,如 plot
。
这个参数全部参考plot
scatter
(绘制气泡图)import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
def test():
# 设置字体为黑体
mpl.rcParams['font.family'] = 'SimHei'
# 设置在中文字体是能够正常显示负号(“-”)
mpl.rcParams['axes.unicode_minus'] = False
a = np.random.randn(100)
b = np.random.randn(100)
# RdYlBu属于中间渐变色
plt.scatter(a, b, s=np.power(10*a+20*b, 2),
c=np.random.rand(100),
cmap=mpl.cm.RdYlBu,
marker="o")
plt.title("气泡图")
plt.show()
matplotlib.pyplot.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)
具有不同标记大小和(或)颜色的 y 与 x 的散点图。
参数:
x, y
: float or array-like, shape (n, )
数据位置。
s
: float or array-like, shape (n, ), optional
以点为单位的标记大小**2。 默认为 rcParams['lines.markersize'] ** 2
。
c
: array-like or list of colors or color, optional
标记颜色。可能的值:
cmap
的渐变色块选取颜色,可以是个随机数)请注意,c 不应是单个数字 RGB 或 RGBA 序列,因为它与要进行颜色映射的值数组无法区分。如果要为所有点指定相同的 RGB 或 RGBA 值,请使用具有单行的二维数组。否则,在大小与 x 和 y 匹配的情况下,值匹配将具有优先权。
如果您希望为所有点指定单一颜色,请首选 color 关键字参数。
默认为 None
。在这种情况下,标记颜色由 color、facecolor 或 facecolors 的值确定。如果未指定这些或 None
,则标记颜色由当前的 Axes
’ 的下一个颜色确定“形状和填充”颜色循环。这个循环默认为 rcParams["axes.prop_cycle"]
(默认: cycler('color', ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b'、'#e377c2'、'#7f7f7f'、'#bcbd22'、'#17becf'])
)。
marker
: MarkerStyle
, default: rcParams["scatter.marker"] (default:
‘o’)
标记样式。 marker 可以是类的实例,也可以是特定标记的文本简写。 有关标记样式的更多信息,请参阅 matplotlib.markers
。
cmap
: str or
Colormap
, default: rcParams["image.cmap"]
(default: 'viridis'
)
Colormap
实例或注册的颜色图名称。 cmap 仅在 c 是浮点数组时使用。
norm
Normalize
, default: None
如果 c 是浮点数数组,norm 用于在 0 到 1 范围内缩放颜色数据 c,以便映射到颜色映射 cmap。 如果 None,使用默认的 colors.Normalize
。
vmin, vmax
: float, default: None
vmin 和 vmax 与默认规范一起使用,以将颜色数组 c 映射到颜色图 cmap。 如果没有,则使用颜色数组的相应最小值和最大值。 在给出 norm 时使用 vmin/vmax 是错误的。
alpha
: float, default: None
Alpha 混合值,介于 0(透明)和 1(不透明)之间。
linewidths
: float or array-like, default: rcParams["lines.linewidth"] (default:
1.5)
标记边缘的线宽。 注意:默认的 edgecolors 是 ‘face’。 您可能也想更改此设置。
edgecolors
: {'face', 'none', *None*} or color or sequence of color, default: rcParams["scatter.edgecolors"] (default:
‘face’)
标记的边缘颜色。 可能的值:
对于未填充的标记,edgecolors 将被忽略。 相反,颜色是像使用 ‘face’ 确定的,即来自 c、colors 或 facecolors。
plotnonfinite
: bool, default: False
是否使用非有限 c 绘制点(即 inf
、-inf
或 nan
)。 如果为“真”,则使用 bad 颜色图颜色绘制点(请参阅 [Colormap.set_bad
](https://matplotlib.org/stable/api/_as_gen/matplotlib.colors.Colormap.html#matplotlib.colors .Colormap.set_bad))。
stem
(绘制棉棒图)import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
def test():
# 设置字体为黑体
mpl.rcParams['font.family'] = 'SimHei'
# 设置在中文字体是能够正常显示负号(“-”)
mpl.rcParams['axes.unicode_minus'] = False
x = np.linspace(0.5, 2*np.pi, 20)
# randn函数返回一个或一组样本,具有标准正态分布。
y = np.random.randn(20)
plt.stem(x, y, linefmt="-.", markerfmt="o", basefmt="-")
plt.title("棉棒图")
plt.show()
matplotlib.pyplot.stem(*args, linefmt=None, markerfmt=None, basefmt=None, bottom=0, label=None, use_line_collection=True, orientation='vertical', data=None)
https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.stem.html?highlight=stem#matplotlib.pyplot.stem
创建一个棉棒图(茎图)。
棉棒图在每个位置 locs 处从基线到 heads 绘制垂直于基线的线,并在此处放置一个标记。 对于垂直棉棒图(默认),locs 是 x 位置,heads 是 y 值。 对于水平茎图,locs 是 y 位置,heads 是 x 值。