一、准备数据
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()