matplotlib的同一注记中的不同字体大小

uurity8g  于 2023-05-18  发布在  其他
关注(0)|答案(3)|浏览(121)

我需要用几个数据行来注解一个pylab矩形-这些数据行的长度不同。通过matplotlib文档和谷歌搜索,我找不到一种方法来给予注解的不同部分不同的大小。
下面的代码片段演示了这个问题:

import pylab
from matplotlib.patches import Rectangle
pylab.rcParams['verbose.level'] = 'debug-annoying' 

def draw_rectangle(lower, upper, entry):
    ax = pylab.subplot(111)
    r = Rectangle( lower, upper[0]-lower[0], upper[1] - lower[1],
            edgecolor='k')
    ax.add_patch(r)

    textRank = str(entry['rank'])
    textTeamName = entry['teamName']
    textSubmissionDate = entry['submissionDate']
    text = textRank + "\n" + textTeamName + "\n" + textSubmissionDate

    ax.add_artist(r)
    rx, ry = r.get_xy()
    cx = rx + r.get_width()/2.0
    cy = ry + r.get_height()/2.0

    ax.annotate(text, (cx, cy), color='w', weight='bold', ha='center', va='center', size=14)

if __name__ == '__main__':
    entry = {'rank': 22, 'submissionDate': '12/21/2012 4:58:45 AM', 'teamName': 'A very very very very very very very very very very long name'}
    lower = [0,0]
    upper = [1,1]
    draw_rectangle(lower, upper, entry)
    pylab.show()

例如,是否有一种方法可以使注解中'teamName'的字体大小不同于'rank'的字体大小?

  • 另一个问题 * 是我找不到字体大小与缩放相关的方法:

我正在创建一个树图,也就是说,pylab窗口填充了不同大小的矩形。如果我想为不同的矩形创建注解,长数据的大小需要非常小(以保持在相应矩形的边界内)。但是,我希望长数据行的字体大小在放大时增长

9avjhtql

9avjhtql1#

首先绘制图,然后使用ax.annotate,迭代x坐标,y坐标,标签和字体大小。

import matplotlib.pyplot as plt

X = [1,2,3,4,5]
Y = [1,1,1,1,1]
labels = 'ABCDE'
sizes = [10, 15, 20, 25, 30]

fig, ax = plt.subplots()

ax.scatter(X, Y)

for x, y, label, size in zip(X, Y, labels, sizes):
    ax.annotate(label, (x, y), fontsize=size)

plt.show()

s3fp2yjn

s3fp2yjn2#

我找不到用不同字体创建注解的方法,所以我将创建一个帮助函数,它将计算注解每行使用的字体权重,并使用相关的(cx,cy)。
然后调用ax。注解几次。

uujelgoq

uujelgoq3#

注解存储在ax.texts中,这是一个Annotation对象列表。注解对象定义了一个set_size()方法,如果在绘图后需要更改特定注解的字体大小,可以调用该方法。
如果使用scikit-learn、statsmodels等外部库创建带有注解的图,这一点尤其有用。

import matplotlib.pyplot as plt

X, Y, labels = [1,2,3,4,5], [1]*5, 'ABCDE'
sizes = [10, 15, 20, 25, 30]

# scatter plot with annotations
plt.scatter(X, Y)
for x, y, label in zip(X, Y, labels):
    plt.annotate(label, (x, y))

# change annotation fontsizes
ax = plt.gca()
for a, size in zip(ax.texts, sizes):
    a.set_size(size)

相关问题