Matplotlib 数据分析之图例与标签高级应用
发布时间:2025/09/18 12:17 来源:砀山家居装修网
# 标注在对应折线上,且有透明边支架
ax.text(
X[100], C[100],
" "+ plot1.get_label,
bbox=dict(facecolor="white", edgecolor="None", alpha=0.85),
color=plot1.get_color,
ha="center", va="center", size="small",
rotation=42.5,)
# ----------------------------------------P3----------------------------------------------------
# 选用圆点
ax.annotate(
"$cos(x)$",
(X[100], C[100]),
size="medium",
color=plot1.get_color,
xytext=(-50, +10),
textcoords="offset points",
arrowprops=dict(
arrowstyle="->", color=plot1.get_color,
connectionstyle="arc3,rad=-0.3"),)
# ----------------------------------------P4----------------------------------------------------
# 圈点和批注的组合
index = 10
ax.scatter(
[X[index]], [C[index]],
s=100, marker="o", zorder=10,
edgecolor=plot1.get_color,
facecolor="white", linewidth=1, clip_on=False,)
ax.text(
X[index], 1.01* C[index],
"A",
zorder=20,size="small",
color=plot1.get_color,
ha="center", va="center", clip_on=False,)
当然,这里是没有极好的选取,因为它确实衡量数据库。对于上述的sin / cos的下述(非常简单),这四种补救方案都是合适的,但当有很多实际数据库一起选用时,有可能这种方式就启动时了。此时我们有可能必须寻求其他方式来标记数据库,如将平面图包含几个平面图分别展示。
结尾和字句
我们已经选用 set_title 、 set_xlabel 和 set_ylabel 方式操作了结尾和字句。当仅仅选用当以前表达式时,确实比较便捷。并且它们的当以前位置通常对大多数数学公式都比较合适。 尽管如此,仍然可以选用各种表达式来定制和;还有二维平面图。
如下面两个平面图下平面图,对比判读,可以明显推断出:上平面图大部分选用了当以前表达式。而下平面图当中,用直线字句替换直线弧度字句,即在直线当中间加上说明字句,为了使其来得靠近直线,删除了有可能与字句挤压的当区域内弧度。此外,将结尾其向右回转,并都可地回转示意平面图支架,将其放于在结尾正下方,并且选用一行两列的排序方式。说是这里没有做过适合于的操作,但我认为结果在光影上来得惊喜。
完备字符判别ax.legend(
edgecolor= "None",
ncol= 2,
loc= "upper right",
bbox_to_anchor=( 1.01, 1.225),
# 主要用途与loc一起定位示意平面图的支架。(x, y, width, height)
borderaxespad= 1,
# 直线线和示意平面图边支架间的填充,以字体微小为单位。
)
# 特设结尾
ax.set_title( "三角函数", x= 1, y= 1.2, ha= "right",size= 14)
# 特设x直线字句
ax.set_xlabel( "视角", va= "center", weight= "bold",size= 12)
ax.xaxis.set_label_coords( 0.5, -0.25)
# 特设字句的经度。
# 当以前只能,y 字句的 x 经度和 x 字句的 y 经度由弧度字句边界支架确定,
# 但是如果有多个直线,这有则会导致多个字句移位不良。
# 特设y直线字句
ax.set_ylabel( "系数", ha= "center", weight= "bold",size= 12)
ax.yaxis.set_label_coords( -0.025, 0.5)
在某些只能(如会议海报),有可能必须让结尾来得吸引眼球,如下平面图下平面图。这可以通过选用 make_axes_locatable 方式来划分每个直线,并为结尾周边预留15%的离地。在这个平面图当中,还用Latex 插入了一个只不过移位的译文,它可以被众所周知是另一种形式或(低阶)装饰。
完备字符参见 latex-text-box[1]
批注
在matplotlib当中,批注有可能是最难处理的取向。原因是它涵盖的概念众多,而这些概念又具有大量的表达式。此外,由于批注所涉及的译文微小是按点排序的,这无疑又是停滞不以前。此外 有可能必须混合选用分辨率、点、点数或数据库单元当中的绝对经度或相对经度。你可以这么认为,你可以对具有任何多种类型透视的任何直线顺利进行批注,那么你现在应可以理解到为什么annotate方式透过这么多表达式。
上面文当中比较一般化,在此之后我们一起看下具体唯子。 批注二维平面图最简单的方式是在希望要批注的点郊外去除字句,如下平面图下平面图。平面图当中,为了使得字句独立自主于数据库分布保持可读性,为字句去除了一个黑色的外形。然而,如果这样的点以致于,所有并不相同的字句有则会使二维平面图变得动荡不安,并有则会掩盖潜在的举足轻重信息。
完备字符判别
上下向上发送给来得多开发人员
importmatplotlib.patheffects aspath_effects
fig = plt.figure(figsize=(10, 5))
ax = plt.subplot(1, 2, 1, xlim=[-1, +1],
xticks=[], ylim=[-1, +1],
yticks=[], aspect=1)
# -----------------------------------------------------------------------------------------
# 手绘散点平面图
np.random.seed(123)
X = np.random.normal(0, 0.35, 1000)
Y = np.random.normal(0, 0.35, 1000)
ax.scatter(X, Y, edgecolor="None", s=60,
facecolor="C1", alpha=0.5)
# 不重复选用:array([1, 4, 0, 3, 2])
I = np.random.choice(len(X), size=5,
replace=False)
# 根据y系数,从大到小顺序排序
Px, Py = X[I], Y[I]
I = np.argsort(Y[I])[::-1]
Px, Py = Px[I], Py[I]
# 将随机所选的五个点用黑色边支架支架选出
ax.scatter(Px, Py, edgecolor="black", facecolor="white", zorder=20)
ax.scatter(Px, Py, edgecolor="None", facecolor="C1", alpha=0.5, zorder=30)
去除字句批注fori inrange(len(I)):
# 五个批注是外观是一样的,可以选用反向去除
text = ax.annotate(
"Point "+ chr(ord( "A") + i),
xy=(Px[i], Py[i]),
xycoords= "data",
xytext=( 0, 18),
textcoords= "offset points",
ha= "center",
size= "medium",
arrowprops=dict(
arrowstyle= "->", shrinkA= 0, shrinkB= 5, color= "black", linewidth= 0.75),
)
text.set_path_effects(
[path_effects.Stroke(linewidth= 2, foreground= "white"), path_effects.Normal]
)
text.arrow_patch.set_path_effects(
[path_effects.Stroke(linewidth= 2, foreground= "white"), path_effects.Normal]
)
另一种方式是将字句碰到平面图的一侧,并选用虚线来建立点和字句间的链接,如下平面图下平面图。
但这些形状、位置、排序方式等外观的设计并不是二维平面图定时的,为了手绘出该二维平面图,就必须计算出来几乎所有的东西。
首先,为了执意线彼此之间交叉,将要能标记的点顺序排序:
X = np.random.normal( 0, .35, 1000)
Y = np.random.normal( 0, .35, 1000)
ax.scatter(X, Y, edgecolor= "None",
facecolor= "C1", alpha= 0.5)
I = np.random.choice(len(X), size= 5, replace= False)
Px, Py = X[I], Y[I]
I = np.argsort(Y[I])[:: -1]
Px, Py = Px[I], Py[I]
从这些点开始,选用一个较为适合于的相连外观来批注它们:
上下向上发送给来得多开发人员
y, dy = 0.25, 0.125
style = "arc,angleA=-0,angleB=0,armA=-100,armB=0,rad=0"
fori inrange(len(I)):
text = ax2.annotate(
"Point "+ chr(ord( "A") + i),
xy=(Px[i], Py[i]),
xycoords= "data",
xytext=( 1.25, y - i * dy),
textcoords= "data",
arrowprops=dict(
arrowstyle= "->",
color= "black",
linewidth= 0.75,
shrinkA= 20,
shrinkB= 5,
patchA= None,
patchB= None,
connectionstyle=style,
),
)
text.arrow_patch.set_path_effects(
[path_effects.Stroke(linewidth= 2, foreground= "white"), path_effects.Normal]
)
也可以选用相连补片的方式在直线外来批注的要能取向,如下平面图下平面图。
该平面图当中,创始人了几个梯形,在一些点四周显示感兴趣的周边,并创始人了与都可的图形直线的相连。注意相连开始在外边的梯形,这是一个不错的动态透过的批注:可以均须取向的本质要批注(通过透过一个patche)和matplotlib会抚养的相连边界的众说纷纭的patche。
完备字符判别
上下向上发送给来得多开发人员
frommatplotlib.gridspec importGridSpec
frommatplotlib.patches importRectangle, ConnectionPatch
# 特设画布
fig = plt.figure(figsize=(6, 5))
n = 5
gs = GridSpec(n, n + 1)
ax = plt.subplot( gs[:n, :n],
xlim=[-1, +1], xticks=[],
ylim=[-1, +1], yticks=[], aspect=1)
# 手绘散点平面图略(见上面字符)
dx, dy = 0.075, 0.075
fori, (x, y) inenumerate(zip(Px, Py)):
# 特设子画布
sax = plt.subplot(
gs[i, n],
xlim=[x - dx, x + dx],
xticks=[],
ylim=[y - dy, y + dy],
yticks=[],
aspect=1,)
# 在子画布上手绘散点
sax.scatter(X, Y, edgecolor="None",
facecolor="C1", alpha=0.5,s=60)
sax.scatter(Px, Py, edgecolor="black",
facecolor="None", linewidth=0.75,s=60)
# 加上批注
sax.text(
1.1, 0.5,
"Point "+ chr(ord("A") + i),
rotation=90, size=8, ha="left", va="center",
transform=sax.transAxes, )
# 手绘梯形
rect = Rectangle(
(x - dx, y - dy),
2* dx, 2* dy,
edgecolor="black", facecolor="None",
linestyle="----", linewidth=0.75, )
ax.add_patch(rect)
# 手绘相连正式版Patch
con = ConnectionPatch(
xyA=(x, y), coordsA=ax.transData,
xyB=(0, 0.5), coordsB=sax.transAxes,
linestyle="----", linewidth=0.75,
patchA=rect, arrowstyle="->", )
fig.add_artist(con)
GridSpec :均须子平面图将放于的六边形的几何位置。必须特设六边形的行数和列数。子平面图配置表达式(唯如,左,右等)可以选取性调整。
ConnectionPatch :主要用途在当中点间建立引道。
上下向上发送给来得多表达式
表达式:
xyA:它是x-y平面图上也称为点A的引道的交会点。
xyB:它是x-y平面图上引道的交会点,也称为点B。
coordsA:A点的经度。
coordsB:B点的经度。
axesA:它是x-y平面图上相连直线的交会点。
axesB:它是x-y平面图上相连直线的绕道。
arrowstyle:主要用途特设相连圆点的外观。其当以前多种类型为“-”。
arrow_transmuter:主要用途或许引道。
connectionstyle:它描述了posA和posB的相连方式。它可以是ConnectionStyle类的实唯,也可以是connectionstyle名称的字符串,它具有预设的逗号分隔物件。
connector:通常或许它,并重新考虑或许哪个相连器。
patchA:主要用途在A点去除正式版。
patchB:主要用途在B点去除正式版
shrinkA:主要用途在A点伸长相连器。
shrinkB:主要用途在B点伸长相连器。
mutation_scale:圆点外观的物件(唯如head_length)的图形人口比唯系数。
mutation_aspect:生物体以前,梯形的离地将被该系数切割,生物体支架将被其倒数侧向。
clip_on:特设摄影家否选用后期制作。
dpi_cor:dpi_cor当以前主要用途linewidth-related一个人和伸长遗传物质。突变覆盖面受此负面影响。
参考文献
[1]
latex-text-box:
[2]
Scientific Visualisation-Python Bell Matplotlib
点这里👇关切我,想到标星哦~
CDA选修征询
。武汉看妇科去哪好广州看牛皮癣哪里最好
武汉看妇科哪家医院比较好
长沙看白癜风哪家医院好
西宁看男科去什么医院最好
急支糖浆止咳最多吃几天?
咳嗽有痰吃什么药
支气管炎咳嗽
黄褐斑
新冠也有“地域性”?提醒:感染后及时就医,别错过黄金72小时
-
睡前千万别给孩子吃这5种食物,会变笨,还严重影响长高!
好多人家从前都有吃到放用餐吃到的蔬果的穿衣,如果吃到少的蔬果或者的蔬果吃到得足足,很较难导致父母睡时频密起夜,上卫生间。 等上放卫生间,先一切都是进入深度清醒就还无需一个现实生活,父母
- 2025-10-23柯洁三星杯止步首轮无缘夺冠
- 2025-10-231.15周六足球赛事分析:曼城主场迎战切尔西能否一败涂地
- 2025-10-23这几种家务孕妈最好是别干,不然可能会毒害到自己和宝宝
- 2025-10-23七星彩精准规律走势图预期第2688期
- 2025-10-23辅食小讲课|鸡蛋小饼干,快手小零食
- 2025-10-23德乙:纽伦堡VS帕德博恩 帕德博恩5轮不胜,沙尔克梦成空?
- 2025-10-23NBA75周年76大球星公布:利拉德入围霍华德落选谓之争议,姚明不在名单中
- 2025-10-23我,10分钟宫口从1指就开到了10指,医生感叹我的无痛根本没起作用
- 2025-10-23希罗:上赛季被公鹿横扫非常尴尬 我们一直想要复仇
- 2025-10-23100 DAYS OF READING | 上学去第九届百日阅读年底启动!