ejl*_*l62 3 python plot matplotlib polar-coordinates seaborn
我正在尝试使用 Seaborn 的 facetGrid 绘制极坐标图,类似于seaborn 画廊中的详细信息, 我正在使用以下代码:
sns.set(context='notebook', style='darkgrid', palette='deep', font='sans-serif', font_scale=1.25)
# Set up a grid of axes with a polar projection
g = sns.FacetGrid(df_total, col="Construct", hue="Run", col_wrap=5, subplot_kws=dict(projection='polar'), size=5, sharex=False, sharey=False, despine=False)
# Draw a scatterplot onto each axes in the grid
g.map(plt.plot, 'Rad', ''y axis label', marker=".", ms=3, ls='None').set_titles("{col_name}")
plt.savefig('./image.pdf')
Run Code Online (Sandbox Code Playgroud)
我的数据给出了以下内容:
我想保持这种每行 5 个地块的组织。
问题是每个子图的标题与刻度值重叠,y 轴标签也是如此。
有没有办法防止这种行为?我可以以某种方式将标题稍微移动到其当前位置上方,我可以将 y 轴标签稍微移动到当前位置的左侧吗?
提前谢谢了!
编辑: 这不是这个的副本SO的问题是一个插曲的标题重叠的轴标签的另一个插曲。
在这里我的问题是,与蜱子情节重叠标题标签同样次要情节和同样轴标签重叠与蜱的标签相同的插曲。
我还想补充一点,我不在乎它们在我的 jupyter 笔记本上重叠(因为它是用它创建的),但是我希望最终保存的图像没有重叠,所以也许我需要做一些事情来保存图像的格式略有不同以避免这种情况,但我不知道是什么(我只是plt.savefig用来保存它)。
编辑 2:如果有人想重现这个问题,这里是一个最小的例子:
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns
sns.set()
sns.set(context='notebook', style='darkgrid', palette='deep', font='sans-serif', font_scale=1.5)
# Generate an example radial datast
r = np.linspace(0, 10000, num=100)
df = pd.DataFrame({'label': r, 'slow': r, 'medium-slow': 1 * r, 'medium': 2 * r, 'medium-fast': 3 * r, 'fast': 4 * r})
# Convert the dataframe to long-form or "tidy" format
df = pd.melt(df, id_vars=['label'], var_name='speed', value_name='theta')
# Set up a grid of axes with a polar projection
g = sns.FacetGrid(df, col="speed", hue="speed",
subplot_kws=dict(projection='polar'), size=4.5, col_wrap=5,
sharex=False, sharey=False, despine=False)
# Draw a scatterplot onto each axes in the grid
g.map(plt.scatter, "theta", "label")
plt.savefig('./image.png')
plt.show()
Run Code Online (Sandbox Code Playgroud)
为了将标题移高一点,您可以将其设置在新位置,
ax.title.set_position([.5, 1.1])
Run Code Online (Sandbox Code Playgroud)
为了将 ylabel 向左移动一点,您可以添加一些填充
ax.yaxis.labelpad = 25
Run Code Online (Sandbox Code Playgroud)
要对 facetgrid 的轴执行此操作,您需要执行以下操作:
for ax in g.axes:
ax.title.set_position([.5, 1.1])
ax.yaxis.labelpad = 25
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10448 次 |
| 最近记录: |