您现在的位置:首页 >> 品牌家居

Matplotlib 数据分析之图例与标签高级应用

发布时间:2025/09/18 12:17    来源:砀山家居装修网

---------------------------------------P2----------------------------------------------------

# 标注在对应折线上,且有透明边支架

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小时

上一篇: 30万内、2.0T,这些大优惠的中大型豪华车,享受购置税翻倍

下一篇: PW-CTS80冷热气流冲击X- -越联仪器

友情链接