gpt4 book ai didi

Python 和 Matplotlib : Simplify plot configuration (xlabel, 标题、图例...)?

转载 作者:太空宇宙 更新时间:2023-11-03 16:22:15 25 4
gpt4 key购买 nike

当我制作绘图时,我总是需要设置x,y标签,标题,图例等。一一设置它们很乏味,所以我尝试将它们放入一个辅助方法中:

def plt_configure(ax=None, xlabel='', ylabel='', title='', legend=False, tight=False, figsize=False):
if ax == None :
ax=plt.gca()
plt.suptitle(title)
else:
ax.set_title(title)
ax.set_xlabel(xlabel)
ax.set_ylabel(ylabel)
if legend:
if isinstance(legend, dict):
ax.legend(**legend)
else:
ax.legend()
if tight:
if tight == 'xtight' or tight == 'x':
ax.autoscale(enable=True, axis='x', tight=True)
elif tight == 'ytight':
ax.autoscale(enable=True, axis='y', tight=True)
else:
ax.axis('tight')
if figsize:
plt.gcf().set_size_inches(figsize)

所以它可以像这样使用

# Use Case 1
plt_configure(xlabel='Direction', ylabel='Difference with ECDF',
legend={'loc':'best'},figsize=(8,2.5))
# Use Case 2
plt_configure(title='Direction Distribution Comparison',
xlabel='Direction',ylabel='Frequency', legend={'loc': 'best'} ,tight='xtight',figsize = (8,2.5))

我想知道是否有更优雅的方法来做到这一点? (定义xlabel、title比一一设置更高效)

此外,我制作的辅助方法看起来相当复杂且冗长。有什么简单的方法吗?

最佳答案

同样,我也习惯为plt设置设置一个辅助函数。我觉得只在这种函数中设置非常基础的功能就足够了,因为其余的始终取决于情节。

您只会遇到“助手”的高度复杂性,因为您试图在其中放入太多选项,本质上使其更难以控制,并且比直接为每个图设置所需选项更不清晰。

这是我使用的:

def plt_setup(width=8, height=6, borders='lb', fontsize=9):
font = {
'family' : 'Roboto',
'weight' : 'light',
'size' : int(fontsize)
}
matplotlib.rc('font', **font)

plt.figure(figsize=(float(width), float(height)))

ax = plt.subplot(111)

for b in ['left', 'right', 'top', 'bottom']:
if b[0] in borders:
ax.spines[b].set_visible(True)
ax.spines[b].set_linewidth(.6)
else:
ax.spines[b].set_visible(False)

ax.get_xaxis().tick_bottom()
ax.get_yaxis().tick_left()

一旦设置了绘图基础,我就会为每个绘图单独控制其余部分。如果您必须在各处创建类似的绘图,并且希望在编写绘图代码时保持简洁,那么您可能需要使用分别处理不同绘图类型的附加函数。

一个非常粗糙的开始(远未完成)可能看起来像这样:

def plt_barchart(df, op=dict()):
plt_setup()
# Set options according to values in op-dict
# (just a few exemplary settings here...)
if 'title' in op.keys():
plt.title(op['title'])
plt.xticks(df['x'].values, df['labels'].values)
# Get amount of bar groups
ycols = [k for k in df.keys().values if k not in ['x', 'labels']]
if 'position' in op.keys() and op['position'] == 'dodge':
# Calculate x offset and bar width depending on group count
barwidth = .8 / len(ycols)
# ...

关于Python 和 Matplotlib : Simplify plot configuration (xlabel, 标题、图例...)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38332149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com