python - 如何通过 Seaborn 和 Matplotlib 让 x 轴标题出现在 Python 中 relplot 的所有子图中?
问题描述
我无法在 relplot 中为我的一个子图显示 x 轴标题。我有三个图表,我做了列,我做了 col_wrap=2 所以我有两个图表在顶部,一个在底部。第一行的第二个图和第二行的图都有 x 轴标题,但第一行的第一个图没有。我得到了刻度和它们的标签,它出现在 for 循环中,但没有出现在 x 轴标题中。
g = sns.relplot(
data=data, x="Days", y="Response", col = 'Event',
col_wrap=2
)
g.set_titles("Events in {col_name}")
g.set_axis_labels("Days", "Response")
for ax in g.axes:
ax.xaxis.set_tick_params(labelbottom=True)
解决方案
g.set_axis_labels(...)
只设置外部标签(docs,几乎在最后)。
默认情况下,使用共享 x 轴,只有“外部”xlabels 设置为可见,内部 xlabels 设置为不可见(并且 seaborn 将它们保留为空字符串)。因此,要查看所有标签,您需要明确设置字符串和可见性。
最后,您可能需要调用plt.tight_layout()
以删除重叠。
请注意,一遍又一遍地重复所有标签会占用屏幕空间,而不会向绘图添加真实信息。
from matplotlib import pyplot as plt
import seaborn as sns
penguins = sns.load_dataset('penguins')
g = sns.relplot(data=penguins, x='flipper_length_mm', y='body_mass_g', col='species', col_wrap=2,
height=2, aspect=2)
# g.set_axis_labels("Flipper length", "Body mass") # only sets the outer labels
for ax in g.axes:
ax.tick_params(labelbottom=True, labelleft=True)
ax.set_xlabel("Flipper length", visible=True)
ax.set_ylabel("Body mass", visible=True)
plt.tight_layout()
plt.show()
推荐阅读
- java - 使用 Spring 发送的 HttpURLConnection 读取错误消息
- ios - 边框层动画不从中心缩放
- python - 访问搜索栏并使用 selenium 进行搜索
- cassandra-2.0 - Cassandra - 不同表中的相同分区键 - 什么时候合适?
- php - 使用 php 每隔 10 个帖子显示 php 文件
- android - Google Speech Api 的转录不像以前那样准确
- typescript - 使用枚举重载 TypeScript 函数
- javascript - 响应谷歌地图 onMarkerClick 事件未在移动设备中触发
- django - Django模型形式选择
- c# - c# Linq - 获取包含整数列表的所有元素