【发布时间】:2021-05-19 18:49:30
【问题描述】:
是否可以知道当前matplotlib样式的名称?我知道我可以使用plt.style.available 获取所有可用样式的列表,但我想要的是获取当前正在使用的样式名称的可能性。我在 spyder,python 3.5 的 ipython 控制台中工作,但如果对此的答案取决于我的工作环境,我会感到惊讶:)
【问题讨论】:
标签: python matplotlib plot
是否可以知道当前matplotlib样式的名称?我知道我可以使用plt.style.available 获取所有可用样式的列表,但我想要的是获取当前正在使用的样式名称的可能性。我在 spyder,python 3.5 的 ipython 控制台中工作,但如果对此的答案取决于我的工作环境,我会感到惊讶:)
【问题讨论】:
标签: python matplotlib plot
查看the source of plt.style.use,我没有看到任何迹象表明使用新样式会存储正在使用的样式的名称。
我考虑过手动检查当前的rcParams 与每种可用样式,如下所示:
import matplotlib.pyplot as plt
for style in plt.style.available:
for key in plt.style.library[style]:
if plt.rcParams[key] != plt.style.library[style][key]:
break
else:
print('Current style is consistent with {}.'.format(style))
但是没有可用的样式与我的默认样式匹配。然后我也打印了不匹配的原因:
for style in plt.style.available:
for key in plt.style.library[style]:
val_now,val_style = plt.rcParams[key],plt.style.library[style][key]
if val_now != val_style:
print('Discarding style {}: {} vs {} for key {}'.format(style,val_now,val_style,key))
break
else:
print('Current style is consistent with {}.'.format(style))
部分输出:
Discarding style seaborn-paper: 0.6 vs 0.4 for key xtick.minor.width
Discarding style seaborn-whitegrid: w vs white for key figure.facecolor
Discarding style seaborn-talk: 0.8 vs 1.3 for key grid.linewidth
注意第二项:w 与 white。现在这是一个问题。命名颜色不容易通过不同名称或 RGBA 值等与相同颜色进行测试。
然后我考虑使用matplotlib.colors.to_rgba()转换每种颜色,但是如果你想正确地做到这一点,你需要完全解析参数,包括这样的宝石:
Discarding style grayscale: figure.facecolor,w vs figure.facecolor,0.75
即使后一个值对应于白色,我们也需要先解析该值并找到隐藏在其中的颜色。
在我看来,唯一安全的实现方式是让plt.style.use 将样式名称存储在某处。但是,如果手动更改 rcParams 中的任何内容会发生什么?那么就不会有当前加载的样式。这是对存储样式名称的反驳。每当更改参数时,都必须进行检查以使最后一个 plt.style.use 调用的样式名称无效。我不确定您的问题是否有明显的解决方案。
【讨论】:
path.simplify_threshold,而“seaborn”有很多不兼容之处,例如与键 xtick.major.pad。跨度>
plt.rcParams 并在启动时使用它更新旧版本的plt.rcParams(通过硬编码或从某个文件中读取)。不理想,而且可能有当时不存在的键(不知道),但它可以很容易地工作得很好。
<pseudocode>linewidth=1.5. color_cycle=[tableu_0,tableu_1,...], margins=0.05</>。这些是目前主要的。
您还可以根据与当前匹配的参数数量对可用样式进行排序,如下所示:
r = [ ( style,
round(sum([1 for key in plt.style.library[style] if plt.rcParams[key] == plt.style.library[style][key]]) \
/len(plt.style.library[style]),2)
)
for style in plt.style.available
]
sorted(r,key=lambda x: x[1], reverse=True)
【讨论】: