python 中 Matplotlib.text.OffsetFrom 类
原文:https://www.geeksforgeeks.org/matplotlib-text-offset from-class-in-python/
Matplotlib 是 Python 中一个惊人的可视化库,用于数组的 2D 图。Matplotlib 是一个多平台数据可视化库,构建在 NumPy 数组上,旨在与更广泛的 SciPy 堆栈一起工作。
matplotlib.text.OffsetFrom
matplotlib.text.OffsetFrom
类是一个可调用的助手类,用于处理注释。
语法:class matplotlib.text.offset from(artist,ref_coord,unit='points ')
参数:
- 艺术家:此对象用于计算偏移量。它通常是一个艺术家,一个 BboxBase 或 Transform。
- ref_coord: 是长度 2 序列。如果艺术家边界框是艺术家边界框或边界框,则该值是偏移原点的位置,如果艺术家边界框是变换,则偏移原点是应用于该值的变换。
- 单位:用于管理偏移输入要使用的屏幕单位(像素或点)。
该类方法:
- get_unit(self) : 它是 call 使用的转换的输入单位。
- set_unit(self,unit): 它是 call 使用的转换的输入单位,其中,unit 参数以“点”或“像素”为单位。
例 1:
import matplotlib.pyplot as plt
import matplotlib.text
fig, ax = plt.subplots()
ax.plot([5,1], label="Label 1")
ax.plot([3,0], label="Label 2")
legend = ax.legend(loc="upper right")
# Create offset from lower right
# corner of legend box, (1.0,0) is
# the coordinates of the offset point
# in the legend coordinate system
offset = matplotlib.text.OffsetFrom(legend, (1.0, 0.0))
# Create annotation. Top right corner
# located -20 pixels below the offset
# point (lower right corner of legend).
ax.annotate("info_string",
xy = (0,0),
size = 14,
xycoords = 'figure fraction',
xytext = (0,-20),
textcoords = offset,
horizontalalignment = 'right',
verticalalignment = 'top')
# Draw the canvas for offset to take effect
fig.canvas.draw()
plt.show()
输出:
例 2:
import matplotlib.pyplot as plt
from matplotlib.patches import Ellipse
import numpy as np
from matplotlib.text import OffsetFrom
fig, (ax1, ax2) = plt.subplots(1, 2)
bbox_args = dict(boxstyle ="round", fc ="0.8")
arrow_args = dict(arrowstyle ="->")
# Here we'll demonstrate the extents of the coordinate system and how
# we place annotating text.
ax1.annotate('figure fraction : 0, 0',
xy =(0, 0),
xycoords ='figure fraction',
xytext =(20, 20),
textcoords ='offset points',
ha = "left",
va = "bottom",
bbox = bbox_args,
arrowprops = arrow_args)
ax1.annotate('figure fraction : 1, 1',
xy =(1, 1),
xycoords ='figure fraction',
xytext = (-20, -20),
textcoords ='offset points',
ha = "right",
va = "top",
bbox = bbox_args,
arrowprops = arrow_args)
ax1.annotate('axes fraction : 0, 0',
xy = (0, 0),
xycoords ='axes fraction',
xytext = (20, 20),
textcoords ='offset points',
ha = "left",
va = "bottom",
bbox = bbox_args,
arrowprops = arrow_args)
ax1.annotate('axes fraction : 1, 1',
xy =(1, 1),
xycoords ='axes fraction',
xytext = (-20, -20),
textcoords ='offset points',
ha = "right",
va = "top",
bbox = bbox_args,
arrowprops = arrow_args)
# It is also possible to generate
# draggable annotations
an1 = ax1.annotate('Drag me 1', xy =(.5, .7),
xycoords ='data',
ha ="center", va ="center",
bbox = bbox_args,
)
an2 = ax1.annotate('Drag me 2', xy =(.5, .5),
xycoords = an1,
xytext =(.5, .3),
textcoords = 'axes fraction',
ha = "center",
va = "center",
bbox = bbox_args,
arrowprops = dict(patchB = an1.get_bbox_patch(),
connectionstyle = "arc3, rad = 0.2",
**arrow_args))
an1.draggable()
an2.draggable()
an3 = ax1.annotate('', xy =(.5, .5), xycoords = an2,
xytext =(.5, .5), textcoords = an1,
ha ="center", va ="center",
bbox = bbox_args,
arrowprops = dict(patchA = an1.get_bbox_patch(),
patchB = an2.get_bbox_patch(),
connectionstyle ="arc3, rad = 0.2",
**arrow_args))
# Finally we'll show off some more
# complex annotation and placement
text = ax2.annotate('xy =(0, 1)\nxycoords = ("data", "axes fraction")',
xy =(0, 1),
xycoords = ("data", 'axes fraction'),
xytext = (0, -20),
textcoords ='offset points',
ha = "center",
va = "top",
bbox = bbox_args,
arrowprops = arrow_args)
ax2.annotate('xy =(0.5, 0)\nxycoords = artist',
xy =(0.5, 0.),
xycoords = text,
xytext = (0, -20),
textcoords = 'offset points',
ha = "center",
va = "top",
bbox = bbox_args,
arrowprops = arrow_args)
ax2.annotate('xy =(0.8, 0.5)\nxycoords = ax1.transData',
xy =(0.8, 0.5),
xycoords = ax1.transData,
xytext = (10, 10),
textcoords = OffsetFrom(ax2.bbox, (0, 0), "points"),
ha = "left",
va = "bottom",
bbox = bbox_args,
arrowprops = arrow_args)
ax2.set(xlim =[-2, 2], ylim =[-2, 2])
plt.show()
输出: