数据可视化之matplotlib

一、准备数据

import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mp

# 在0.01到10之间均匀的取1000个数
x = np.linspace(0.01, 10, 1000)
# 在标准正态分布中随机取1000个数
y = np.random.randn(1000)

二、 函数用法

1、plot()——展现变量的趋势变化

plt.plot(x, y, ls="-", lw=2, label=“plot figure”)

参数说明:
x:x轴上的数值
y:y轴上的数值
ls:折线图的线条风格
lw:折线图的线条宽度
label:标记图形内容的标签文本

plt.plot(x, y, ls="-", lw=2, label="折线图")
plt.show()

在这里插入图片描述
2、scatter()——寻找变量之间的关系

plt.scatter(x, y, c=“b”, label=“scatter figure”)

参数说明:
c:散点图中的标记的颜色

plt.scatter(x, y, label="散点图")
plt.show()

在这里插入图片描述
3、xlim()——设置x轴的数值显示范围 / ylim()

plt.xlim(xmin, xmax)

参数说明:
xmin:x轴上的最小值
xmax:x轴上的最大值

plt.scatter(x, y, label="scatter figure")
# 显示图例
plt.legend()
plt.xlim(0.05, 10)
plt.ylim(0, 1)
plt.show()

在这里插入图片描述
4、xlabel()——设置x轴的标签文本/ylabel——设置y轴的标签文本

plt.xlabel(string)

参数说明:
string:标签文本内容

plt.plot(x, y, ls="-", lw=2, c="c", label="plot figure")
plt.legend()
plt.xlabel("x-axis")
plt.ylabel("y-axis")
plt.show()

在这里插入图片描述
5、grid()——绘制刻度线的网格线

plt.grid(linestyle=":", color=“r”)

参数说明:
linestyle:网格线的线条风格
color:网格线的线条颜色

plt.plot(x, y, ls="-", lw=2, c="c", label="plot figure")
plt.legend()
plt.grid(linestyle=":", color="r")
plt.show()

在这里插入图片描述
6、axhline()——绘制平行于x轴的水平参考线 / axvline()

plt.axhline(y=0.0, c=“r”, ls="–", lw=2)

参数说明:
y:水平参考线的出发点
c:参考线的线条颜色

plt.plot(x, y, ls="-", c="c", label="plot figure")
plt.legend()
plt.axhline(y=0.0, c="r", ls="--", lw=2)
plt.axvline(x=4.0, c="r", ls="--", lw=2)
plt.show()

在这里插入图片描述
7、axvspan()——绘制垂直于x轴的参考区域 / axhspan()

plt.axvspan(xmin=1.0, xmax=2.0, facecolor=“y”, alpha=0.3)

参数说明:
xmin:参考区域的起始位置
xmax:参考区域的终止位置
facecolor:参考区域的填充颜色
alpha:参考区域的填充颜色的透明度

plt.plot(x, y, ls="-", lw=2, c="c", label="plot figure")
plt.legend()
plt.axvspan(xmin=4.0, xmax=6.0, facecolor="y", alpha=0.3)
plt.axhspan(ymin=0.0, ymax=0.5, facecolor="y", alpha=0.3)
plt.show()

在这里插入图片描述
8、annotate()——添加图形内容细节的指向型注释文本

plt.annotate(string, xy=(np.pi/2, 1.0), xytext=((np.pi/2)+0.15, 1.5), weight=“bold”, color=“b”, arrowprops=dict(arrowstyle="->", connectionstyle=“arc3”, color=“b”))

参数说明:
string:图形内容的注释文本
xy:被注释图形内容的位置坐标
xytext:注释文本的字体粗细风格
color:注释文本的字体颜色
arrowprops:指示被注释内容的箭头的属性字典

x = np.linspace(0.01, 10, 100)
y = np.sin(x)
plt.plot(x, y, ls="-", lw=2, c="c", label="plot figure")
plt.legend()
plt.annotate(
    "maximum",
    xy=(np.pi/2, 1.0),
    xytext=((np.pi/2) + 1.0, .8),
    weight="bold",
    color="b", 
    arrowprops=dict(arrowstyle="->", connectionstyle="arc3", color="b")
)
plt.show()

在这里插入图片描述
9、text()——添加图形内容细节的无指向型注释文本

plt.text(x, y, string, weight=“bold”, color=“b”)

参数说明:
x:注释文本所在位置的横坐标
y:注释文本内容所在位置的纵坐标
string:注释文本内容
weight:注释文本内容的粗细风格
color:注释文本内容的字体颜色

x = np.linspace(0.01, 10, 100)
y = np.sin(x)
plt.plot(x, y, ls="-.", lw=2, c="c", label="plot figure")
plt.legend()
plt.text(3.10, 0.09, "y=sin(x)", weight="bold", color="b")
plt.show()

在这里插入图片描述
10、title()——添加图形内容的标题

plt.title(string)

参数说明:
string:图形内容的标题文本

x = np.linspace(0.01, 10, 100)
y = np.sin(x)
plt.plot(x, y, ls="-", lw=2, c="c", label="plot figure")
plt.legend()
plt.title("y=sin(x)")
plt.show()

在这里插入图片描述
11、legend()——标示不同图形的文本标签图例

plt.legend(loc=“lower left”)

参数说明:
loc:图例在图中的地理位置

x = np.linspace(0.01, 10, 100)
y = np.sin(x)
plt.plot(x, y, ls="-.", lw=2, c="c", label="plot figure")
plt.legend(loc="lower left")
plt.show()

在这里插入图片描述

三、使用统计函数

1、bar()——用于绘制柱状图,在x轴上绘制定性数据的分布特征

plt.bar(x, y)

参数说明:
x:标示在x轴上的定性数据的类别
y:每种定性数据的类别的数量

x = [1, 2, 3, 4, 5, 6 ,7, 8]
y = [3, 1, 4, 5, 8, 9, 7, 2]
plt.bar(x, y, align="center", color="c", tick_label=["q", "a", "c", "e","r","j", "b", "p"], hatch="/")
plt.xlabel("box-number")
plt.ylabel("box-weight(kg)")
plt.show()

在这里插入图片描述
2、barh()——用于绘制条形图,在y轴上绘制定数据的分布特征

plt.barh(x, y)

参数说明:
x:标示在y轴上的定性数据的类别
y:每种定性数据的类别的数量

plt.barh(x, y, align="center", color="c", tick_label=["q", "a", "c", "e", "r", "j", "b", "p"], hatch="/")
plt.xlabel("box-weight(kg)")
plt.ylabel("box-no")
plt.show()

在这里插入图片描述
3、hist()——用于绘制直方图,在x轴上绘制

plt.hist(x)

参数说明:
x:在x轴上绘制箱体的定量数据输入值

x = np.random.randint(0, 10, 100)
bins = range(0, 11, 1)
plt.hist(x, 
         bins=bins,
         color="g",
         histtype="bar", 
         rwidth=0.5,
         alpha=0.6
        )
plt.xlabel("box-weight(kg)")
plt.ylabel("box-no")
plt.show()

在这里插入图片描述
4、pie()——绘制饼图

plt.pie(x)

参数说明:
x:定性数据的不同类别的百分比

# 防止中文出现乱码
plt.rcParams['font.sans-serif'] = [u'SimHei']
plt.rcParams['axes.unicode_minus'] = False

kinds = "简易箱", "保温箱", "行李箱", "密封箱"
colors = ["red", "green", "yellow", "blue"]
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()

在这里插入图片描述
5、polar()——在极坐标上绘制折线图

plt.polar(theta, r)

参数说明:
theta:每个标记所在射线与极径的夹角
r:每个标记到原点的距离

barSlices = 12
theta = np.linspace(0.0, 2*np.pi, barSlices, endpoint=False)
r = 30*np.random.rand(barSlices)
plt.polar(
    theta,
    r,
    color="chartreuse",
    linewidth=2,
    marker="*",
    mfc="b",
    ms=10
)
plt.show()

在这里插入图片描述
6、scatter()——二维数据借助气泡大小展示三维数据

plt.scatter(x, y)

参数说明:
x:x轴上的数值
y:y轴上的数值
s:散点标记的大小
c:散点标记的颜色
cmap:将浮点数映射成颜色的颜色映射表

a = np.random.randn(100)
b = np.random.randn(100)

plt.scatter(a, b, s=np.power(10*a + 20*b, 2),
           c=np.random.rand(100),
           cmap=mp.cm.RdYlBu,
           marker="o")
plt.show()

在这里插入图片描述
7、stem()——绘制棉棒图,离散有序数据

plt.stem(x, y)

参数说明:
x:指定棉棒的x轴的x轴上基线的位置
y:绘制棉棒的长度
linefmt:棉棒的样式
markerfmt:棉棒末端的样式
basefmt:指定基线的样式

x = np.linspace(0.5, 2*np.pi, 20)
y = np.random.randn(20)

plt.stem(x, y, linefmt="-.", markerfmt="o", basefmt="-")

plt.show()

在这里插入图片描述
8、boxplot()——绘制箱线图

plt.boxplot(x)

参数说明:绘制箱线图的输入数据

x = np.random.randn(1000)

plt.boxplot(x)

plt.xticks([1], ["随机数生成器AlphaRM"])
plt.ylabel("随机数值")
plt.title("随机数生成器抗干扰能力的稳定性")

plt.grid(axis="y", ls=":", lw=1, color="gray", alpha=0.4)

plt.show()

在这里插入图片描述
9、errorbar()——绘制y轴或者x轴方向的误差范围

plt.errorbar(x, y, yerr=a, xerr=b)

参数说明:
x:数据点的水平位置
y:数据点的垂直位置
yerr:y轴方向的数据点的误差计算方法
xerr:x轴方向的数据点的误差计算方法

x = np.linspace(0.1, 0.6, 6)
y = np.exp(x)

plt.errorbar(x, y, fmt="bo:", yerr=0.2, xerr=0.02)
plt.xlim(0, 0.7)
plt.show()

在这里插入图片描述

四、绘制统计图形

1、柱状图
主要应用在定性式数据的可视化场景中,或是离散型数据的分布展示

import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mp

mp.rcParams["font.sans-serif"] = ["SimHei"]
mp.rcParams["axes.unicode_minus"] = False

x = [1, 2, 3, 4, 5]
y = [6, 10, 4, 5, 1]

# tick_label—>刻度标签值
plt.bar(x, y, align="center", color="b", tick_label=["A", "B", "C", "D", "E"], alpha=0.6)

plt.xlabel("测试难度")
plt.ylabel("试卷份数")

plt.grid(True, axis="y", ls=":", color="r", alpha=0.3)

plt.show()

在这里插入图片描述
2、条形图
如果将柱状图中的柱体由垂直方向变成水平方向,柱状图就变成条形图。

plt.barh(x, y, align="center", color="c", tick_label=["A", "B", "C", "D", "E"])
plt.ylabel("测试难度")
plt.xlabel("试卷份数")

plt.grid(True, axis="x", ls=":", color="r", alpha=0.3)
plt.show()

在这里插入图片描述
3、堆积图
将若干统计图形堆叠起来的统计图形,是一种组合式图形

x = [1, 2, 3, 4, 5]
y1 = [6, 10, 4, 5, 1]
y2 = [2, 6, 3, 8, 5]

plt.bar(x, y1, align="center", color="#66c2a5", tick_label=["A", "B", "C", "D", "E"], label="班级A")
plt.bar(x, y2, align="center", bottom=y1, color="#8da0cb", label="班级B")

plt.xlabel("测试难度")
plt.ylabel("试卷份数")

plt.show()

在这里插入图片描述
4、分块图
分为多数据并列柱状图和多数据平行条形图

x = np.arange(5)
y1 = [6, 10, 4, 5, 1]
y2 = [2, 6, 3, 8, 5]

bar_width = 0.35
tick_label = ["A", "B", "C", "D", "E"]

plt.bar(x, y1, bar_width, color="c", align="center", label="班级A", alpha=0.5)
plt.bar(x+bar_width, y2, bar_width, color="b", align="center", label="班级B", alpha=0.5)

plt.xlabel("测试难度")
plt.ylabel("试卷份数")

plt.xticks(x+bar_width/2, tick_label)

plt.show()

在这里插入图片描述
5、堆积折线图
按照垂直方向上彼此堆叠且又不相互覆盖的排列顺序,绘制若干条折线图而形成的组合图形

x = np.arange(1, 6, 1)
y1 = [0, 4, 3, 5, 6]
y2 = [1, 3, 4, 2, 7]
y3 = [3, 4, 1, 6, 5]

labels = ["Blue", "Brown", "Green"]
colors = ["#8da0cb", "#fc8d62", "#66c2a5"]

plt.stackplot(x, y1, y2, y3, labels=labels, colors=colors)

plt.legend(loc="upper left")

plt.show()

在这里插入图片描述
6、间断条形图
用来可视化定性数据的相同指标在时间维度上的指标 值的变化情况,实现定性数据的相同指标的变化情况的有效直观比较

plt.broken_barh([(30,100), (180,50), (260,70)], (20,8), facecolors="#1f78b4")
plt.broken_barh([(60,90), (190,20), (230,30), (280,60)], (10,8), facecolors=("#7fc97f", "#beaed4", "#fdc086", "#ffff99"))

plt.xlim(0, 360)
plt.ylim(5, 35)
plt.xlabel("演出时间")

plt.xticks(np.arange(0,361, 60))
plt.yticks([15, 25], ["歌剧院A", "歌剧院B"])

plt.grid(ls="-", lw=1, color="gray")

plt.title("不同地区的歌剧院的演出时间比较")

plt.show()

在这里插入图片描述
7、阶梯图
反映数据的趋势变化或是周期规律,经常使用在时间序列数据的可视化任务中,凸显时序数据的波动周期和规律

x = np.linspace(1, 10, 10)
y = np.sin(x)

# where="pre"表示x轴上的取值左开右闭,where="post"表示左闭右开
plt.step(x, y, color="#8dd3c7", where="pre", lw=2)

plt.xlim(0, 11)
plt.xticks(np.arange(1, 11, 1))
plt.ylim(-1.2, 1.2)

plt.show()

在这里插入图片描述
8、直方图
直方图是用来展示连续型数据分布特征的统计图形
直方图的柱体中间没有间隙

x = np.random.randint(0, 100, 100)
bins = range(0, 101, 10)

plt.hist(x,
        bins=bins,
         color="#377eb8",
        histtype="bar",
        rwidth=1.0)

plt.xlabel("测试成绩")
plt.ylabel("学生人数")

plt.show()

在这里插入图片描述
8.1、堆积直方图

x = [np.random.randint(0, 100 ,100), np.random.randint(0, 100, 100)]
colors = ["#8dd3c7", "#bebada"]
labels = ["班级A", "班级B"]

bins = range(0, 101, 10)

plt.hist(x,
        bins=bins,
        color=colors,
        histtype="bar",
        rwidth=1.0,
        stacked=True,
        label=labels)

plt.xlabel("测试成绩(分)")
plt.ylabel("学生人数")

plt.legend(loc="upper left")

plt.show()

在这里插入图片描述
8.2、堆积阶梯型直方图

x = [np.random.randint(0, 100 ,100), np.random.randint(0, 100, 100)]
colors = ["#8dd3c7", "#bebada"]
labels = ["班级A", "班级B"]

bins = range(0, 101, 10)

plt.hist(x,
        bins=bins,
        color=colors,
        histtype="stepfilled",
        rwidth=1.0,
        stacked=True,
        label=labels)

plt.xlabel("测试成绩(分)")
plt.ylabel("学生人数")

plt.legend(loc="upper left")

plt.show()


9、饼图
饼图是用来展示定性数据比例分布特征的统计图形,主要应用在定性数据的可视化场景中,或者是用来进行离散型数据的比例展示

labels = ["A难度水平", "B难度水平", "C难度水平", "D难度水平"]
students = [0.35, 0.15, 0.20, 0.30]
colors = ["#377eb8", "#4daf4a", "#984ea3", "#ff7f00"]
explode = (0.1, 0.1, 0.1, 0.1)

plt.pie(
    students, # 饼片代表的百分比
    explode=explode, # 饼片边缘脱离半径的百分比
    labels=labels, 
    autopct="%3.1f%%", # 饼片文本标签内容对应的数值百分比样式
    startangle=45, # 以x轴作为起始位置,第一个饼片逆时针旋转的角度
    shadow=True,
    colors=colors
)
plt.title("选择不同难度测试试卷的学生占比")
plt.show()

在这里插入图片描述

四、完善统计图形

1、添加图例和标题

import matplotlib as mp
import matplotlib.pyplot as plt
import numpy as np

mp.rcParams["font.sans-serif"] = ["SimHei"]
mp.rcParams["axes.unicode_minus"] = False

x = np.linspace(-2*np.pi, 2*np.pi, 200)
y1 = np.sin(x)
y2 = np.cos(x)

plt.plot(x, y1, label=r"$\sin(x)$")
plt.plot(x, y2, label=r"$\cos(x)$")

plt.legend(loc="lower left")

plt.title("正弦函数和余弦函数的折线图")

plt.show()

在这里插入图片描述
1.1 案例的展示样式的调整

x = np.arange(0, 2.1, 0.1)
y1 = np.power(x, 3)
y2 = np.power(x, 2)
y3 = np.power(x, 1)

plt.plot(x, y1, ls="-", lw=2, label="$x^{3}$")
plt.plot(x, y2, ls="-", lw=2, label="$x^{2}$")
plt.plot(x, y3, ls="-", lw=2, label="$x^{1}$")

# bbox_to_anchor线框位置参数,fancybox控制线框的圆角或直角
plt.legend(loc="upper left", bbox_to_anchor=(0.05, 0.95), ncol=3, title="power function", shadow=True, fancybox=True)

plt.show()

在这里插入图片描述
1.2 标题的展示样式的调整

x = np.linspace(-2, 2, 1000)
y = np.exp(x) # 返回e的x次幂

plt.plot(x, y, ls="-", lw=2, color="g")

plt.title("center demo")
plt.title("Left Demo", loc="left", fontdict={
    "size": "xx-large",
    "color": "r",
    "family": "Times New Roman"
})

plt.title("right demo", loc="right",
         family="Comic Sans MS",
         size=20,
         style="oblique",
         color="c")

plt.show()

在这里插入图片描述
1.3 带图例的饼图

elements = ["面粉", "砂糖", "奶油", "草莓酱", "坚果"]
weight = [40, 15, 20, 10, 15]
colors = ["#1b9e77", "#d95f02", "#7570b3", "#66a61e", "#e6ab02"]
wedges, texts, autotexts = plt.pie(weight, autopct="%3.1f%%", textprops=dict(color="w"), colors=colors)
plt.legend(wedges, elements, fontsize=12, title="配料表", loc="center left", bbox_to_anchor=(0.91, 0, 0.3, 1))

plt.setp(autotexts, size=15, weight="bold") # 设置线条属性
plt.setp(texts, size=12)

plt.title("果酱面包配料比例表")

plt.show()

在这里插入图片描述
2、调整刻度范围和刻度标签

x = np.linspace(-2*np.pi, 2*np.pi, 200)
y = np.sin(x)

plt.subplot(211) # 将画布分成2行1列的画布格式,并绘制图形1

plt.plot(x, y)

plt.subplot(212) # 绘制图形2

plt.xlim(-2*np.pi, 2*np.pi)

plt.xticks([-2*np.pi, -3*np.pi/2, -1*np.pi, -1*(np.pi)/2, 0, (np.pi)/2, np.pi, 3*np.pi/2, 2*np.pi],
          [r"$-2\pi$", r"$-3\pi/2$", r"$-\pi$", r"$-\pi2$", r"$0$", r"$\pi/2$",r"$\pi$", r"$3\pi/2$", r"$2\pi$"])

plt.plot(x, y)

plt.show()

在这里插入图片描述
2.1 逆序设置坐标轴刻度标签

time = np.arange(1, 11, 0.5)
machinePower = np.power(time, 2) + 0.7

plt.plot(time, machinePower, linestyle="-", linewidth=2, color="r")

plt.xlim(10, 1)

plt.xlabel("使用年限")
plt.ylabel("机器功率")

plt.title("机器损耗曲线")

plt.grid(ls=":", lw=1, color="gray", alpha=0.5)

plt.show()

在这里插入图片描述
3、向统计图形添加表格

labels = "A", "B", "C", "D"
students = [0.35, 0.15, 0.20, 0.30]
explode = (0.1, 0.1, 0.1, 0.1)
colors = ["#377eb8", "#e41a1c", "#4daf4a", "#984ea3"]

plt.pie(students, explode=explode, labels=labels, autopct="%1.1f%%", startangle=45, shadow=True, colors=colors)

plt.title("选择不同难度测试试卷的学生占比")

# 添加表格
colLabels = ["A", "B", "C", "D"]
rowLabels = ["学生选择试卷人数"]
studentValues = [[350, 150, 200, 300]]
colColors = ["#377eb8", "#e41a1c", "#4daf4a", "#984ea3"]

plt.table(cellText=studentValues,
         cellLoc="center", # 表格中的数据对齐位置,左对齐,居中对齐,右对齐
         colWidths=[0.1]*4, # 每列的宽度
         colLabels=colLabels, # 列名称
         colColours=colColors, # 列名所在单元格的颜色
         rowLabels=rowLabels,
         rowLoc="center",
         loc="bottom")

plt.show()

在这里插入图片描述

五、图形样式

1、设置坐标轴的刻度样式

fig = plt.figure(facecolor=(1.0, 1.0, 0.9412))
ax = fig.add_axes([0.1, 0.4, 0.5, 0.5])
for ticklabel in ax.xaxis.get_ticklabels():
    ticklabel.set_color("slateblue")
    ticklabel.set_fontsize(18)
    ticklabel.set_rotation(30)

for tickline in ax.yaxis.get_ticklines():
    tickline.set_color("lightgreen")
    tickline.set_markersize(20)
    tickline.set_markeredgewidth(2)

plt.show()

在这里插入图片描述
1.1 货币和时间序列样式的刻度标签

from calendar import month_name, day_name
from matplotlib.ticker import FormatStrFormatter

fig = plt.figure()
ax = fig.add_axes([0.2, 0.2, 0.7, 0.7])

x = np.arange(1, 8, 1)
y= 2*x

ax.plot(x, y, ls="-", lw=2, color="orange", marker="o", ms=20, mfc="c", mec="c")

ax.yaxis.set_major_formatter(FormatStrFormatter(r"$\yen%1.1f$"))
plt.xticks(x, day_name[0:7], rotation=20)

ax.set_xlim(0, 8)
ax.set_ylim(0, 18)

plt.show()

在这里插入图片描述
2、添加有指示注解和无指示注解

ax.annotate(s, x, y, xycoords, xytext, textcoords, weight, color, arrowprops)

参数说明:
s:注解的内容
xy:需要进行解释的位置,即被解释内容的位置
xycoords:xy的坐标系统,参数值"data"表示与折线图使用相同的坐标系统
xytext:注释内容所在的位置,如果把注释内容想象成一个矩形,xytext标记的是左下角顶点的位置
textcoords:xytext的坐标系统
weight:注释内容的显示风格
color:注释内容的颜色
arrowprops:指示箭头的属性,包括箭头风格、颜色等

x = np.linspace(0.5, 3.5, 100)
y = np.sin(x)

fig = plt.figure()
ax = fig.add_subplot(111)

ax.plot(x, y, ls="-", lw=2)

ax.annotate("maxmium", xy=(np.pi/2, 1.0),
                  xycoords="data", xytext=((np.pi/2) + 0.15, 0.8), textcoords="data",
                   weight="bold", color="r", 
                   arrowprops=dict(arrowstyle="->", connectionstyle="arc3",
                 color="r")
                  )
ax.text(2.8, 0.4,"$y=\sin(x)$", fontsize=20,color="b", bbox=dict(facecolor="y", alpha=0.5))

plt.show()

在这里插入图片描述
2.1 圆角文本框的设置

x = np.linspace(0.0, 10, 40)
y = np.random.randn(40)
plt.plot(x, y, ls="-", lw=2,
        marker="o",
        ms=20,
        mfc="orange",
        alpha=0.6)

plt.grid(ls=":", color="gray", alpha=0.5)

plt.text(6, 0, "Matplotlib", size=30, rotation=30.,
        bbox=dict(boxstyle="round", ec="#8968CD", fc="#FFE1FF")) # boxstyle="square"是设置直角线框

plt.show()

在这里插入图片描述
2.2 文本的水印效果

x = np.linspace(0.0, 10, 40)
y = np.random.randn(40)

plt.plot(x, y, ls="-", lw=2,
        marker="o",
        ms=20,
        mfc="orange",
        alpha=0.6)

plt.grid(ls=":", color="gray", alpha=0.5)

plt.text(1, 2, "Matplotlib", fontsize=50, color="gray", alpha=0.5)

plt.show()

在这里插入图片描述
2.3 圆角线框的有弧度指示的注解

x = np.linspace(0, 10, 2000)
y = np.sin(x)*np.cos(x)

fig = plt.figure()
ax = fig.add_subplot(111)

ax.plot(x, y, ls="-", lw=2)

bbox = dict(boxstyle="round", fc="#7EC0EE", ec="#9B30FF")
arrowprops = dict(arrowstyle="-|>",
                 connectionstyle="angle,angleA=0,angleB=90,rad=10", color="r")

ax.annotate("single point", 
           (5, np.sin(5)*np.cos(5)),
           xytext=(3, np.sin(3)*np.cos(3)),
           fontsize=12, color="r",
           bbox=bbox, arrowprops=arrowprops)

ax.grid(ls=":", color="gray", alpha=0.6)

plt.show()

在这里插入图片描述
2.4 有箭头指示的趋势线

x = np.linspace(0 ,10, 2000)
y = np.sin(x)

fig = plt.figure()
ax = fig.add_subplot(111)

ax.plot(x, y, ls="-", lw=2)

ax.set_ylim(-1.5, 1.5)

arrowprops = dict(arrowstyle="-|>", color="r")

ax.annotate("",
           (3*np.pi/2, np.sin(3*np.pi/2)+0.05),
           xytext=(np.pi/2, np.sin(np.pi/2)+0.05),
            color="r",
            arrowprops=arrowprops
           )

ax.arrow(0.0, -0.4, np.pi/2, 1.2, head_width=0.05, head_length=0.1,
        fc="g", ec="g")
ax.grid(ls=":", color="gray", alpha=0.6)

plt.show()

在这里插入图片描述
2.5 桑葚图

from matplotlib.sankey import Sankey

flows = [0.2, 0.1, 0.4, 0.3, -0.6, -0.05, -0.15, -0.2]
labels = ["", "", "", "", "family", "trip", "education", "sport"]
orientations = [1, 1, 0, -1, -1, -1, 1, 0]
sankey = Sankey()
sankey.add(flows=flows, # 正值表示流入值
          labels=labels,
          orientations=orientations,
          color="c",
          fc="lightgreen",
          patchlabel="Life cost",
          alpha=0.7)

diagrams = sankey.finish()
diagrams[0].texts[4].set_color("r")
diagrams[0].texts[4].set_weight("bold")
diagrams[0].text.set_fontsize(20)
diagrams[0].text.set_fontweight("bold")

plt.title("日常生活的成本开支的流量图")
plt.show()

在这里插入图片描述
3、实现标题和坐标轴标签的投影效果

import matplotlib.patheffects as pes

x = np.linspace(0.5, 3.5, 100)
y = np.sin(x)

fontsize = 23

plt.plot(x, y, ls="--", lw=2)

title = "$y=\sin({x})$"
xaxis_label = "$x\_axis$"
yaxis_label = "$y\_axis$"

title_text_obj = plt.title(title, fontsize=fontsize, va="bottom")

xaxis_label_text_obj = plt.xlabel(xaxis_label, fontsize=fontsize-3, alpha=1.0)
yaxis_label_text_obj = plt.ylabel(yaxis_label, fontsize=fontsize-3, alpha=1.0)

title_text_obj.set_path_effects([pes.withSimplePatchShadow()])
pe = pes.withSimplePatchShadow(offset=(-1, 1), shadow_rgbFace="r", alpha=.3)
xaxis_label_text_obj.set_path_effects([pe])
yaxis_label_text_obj.set_path_effects([pe])

plt.show()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值