递增Matplotlib字符串字体大小

3
我希望将图表标题字体大小递增,从例如mediumlarge
我的图表基础字体大小和修饰符都来自于matplotlibrc .conf文件。通常是这样表达的:
font.size : 8
axes.titlesize : medium

现在,对于我的一个图表,我希望增加标题的字体大小。

如果这是一个数字(与线宽一样),我可以这样做:

from matplotlib import rcParams
newsize = rcParams['lines.linewidth']*2

但这不会像那样轻松。 我当然可以使用字典或一系列elif语句——但是我在考虑matplotlib,因为我知道它如何解释这些字符串,也许还有一些函数可以对它们进行递增。你知道这样的方法吗? 编辑:有人建议这是其他问题的重复。这个问题特别询问如何递增“字符串字体大小”(就像我在问题标题中写的一样)。这意味着手动将字体大小设置为某个整数不是一个选项(除非有一种方法可以将matplotlibrc的“small”或“medium”转换为整数——这也是这个问题的独特之处)。

2
你到底想做什么?你说了你能做什么,你暗示了如何解决问题,但你并没有清楚地陈述问题本身。你想通过因子增加标题大小吗?你想添加一个常数吗?你想选择相对字体大小梯子上的下一步吗?如果你认为可以用 elif 解决问题,也许展示一下代码的 [mcve],这样实际问题就会变得清晰,然后可以找到更有效的解决方案。 - ImportanceOfBeingErnest
我认为这不是重复的问题。但正如所说,这个问题很不清楚。结果是一样的:你不会得到答案。有没有可能以有用的方式编辑问题(不是防御某些重复,而是建设性地提出一个清晰的问题)? - ImportanceOfBeingErnest
我无法想象你希望以何种更简单的方式阅读此内容。如果图表是使用例如 axes.titlesize: medium 创建的,我希望将大小增加到下一个更大的选项,即 axes.titlesize: large - TheChymera
1个回答

4

因此问题似乎是:鉴于 rcParam "axes.titlesize",如何将标题大小设置为下一个更高的相对大小规范。

解决方案必然取决于 "axes.titlesize" 中可能存在哪些值。如果我们已经知道这些值只能是以下之一:'xx-small','x-small','small','medium','large','x-large',那么解决方案会相对容易。只需要在所有项的列表中找到下一个可能的项即可。

import matplotlib.pyplot as plt
sizes = ['xx-small','x-small','small','medium','large','x-large','xx-large']
plt.rcParams["axes.titlesize"] = sizes[sizes.index(plt.rcParams["axes.titlesize"])+1]

通用的一般情况是,"axes.titlesize" 可以是数字或任何有效的尺寸字符串。处理方法如下:
import matplotlib.pyplot as plt
sizes = ['xx-small','x-small','small','medium','large','x-large','xx-large']
cs = plt.rcParams["axes.titlesize"]
try:
    plt.rcParams["axes.titlesize"] = float(cs)*1.2
except:
    if cs in ["larger", "smaller"]:
        cs = cs[:5]
    if cs in sizes[:-1]:    
        plt.rcParams["axes.titlesize"] = sizes[sizes.index(cs)+1]
    elif cs == 'xx-large':
        plt.rcParams["axes.titlesize"] =  plt.rcParams["font.size"]*1.2**4

谢谢你的回答!你确定字符串大小规格的1步增量的数值等价于浮点数大小规格的20%吗?如果是这样,那么在xx-large之后应该是1.2**4吧? - TheChymera
1
是的,步长因子为1.2。您说得对,从xx-large获取下一步应该是1.2 ** 4 - ImportanceOfBeingErnest

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接