当Pandas在多个子图上创建散点图带有颜色标签时,无法设置xlabel

3

当我使用Pandas制作散点图并在多个子图中指定“c”颜色属性列时,我无法设置图的x轴标签xlabel

  • 例如,这段代码可以正常工作:我可以看到xlabel
import numpy as np
import pandas as pd
import pylab as plt
plt.ion()

foo = pd.DataFrame(np.random.randn(5, 5), columns='a b c d e'.split())

fig, (ax1, ax2) = plt.subplots(nrows=2, sharex=True)
foo.plot.scatter(x='a', y='b', ax=ax1)
foo.plot.scatter(x='a', y='c', ax=ax2)
ax2.set_xlabel('xxx')  # works

然而,下面稍微有些不同的变化,在设置颜色 c 字段时,并没有设置 xlabel:
fig, (ax1, ax2) = plt.subplots(nrows=2, sharex=True)
foo.plot.scatter(x='a', y='b', ax=ax1, c='c')
foo.plot.scatter(x='a', y='c', ax=ax2, c='c')
ax2.set_xlabel('xx')  # NO x label

plt.xlabel 也不起作用。 ax2.get_xlabel() 返回了我期望的 "xx",但它不可见:

no x label

在这种情况下该如何获得 xlabel?Pandas 的 Github 存储库有 3000 多个未解决问题,而不是将其列为错误,我宁愿找到一个以 Matplotlib 为导向的解决方法来呈现 xlabel。(Python 3.8.1、Pandas 1.0.3、Matplotlib 3.2.0。)

编辑:由于造成混淆,已经从数字列名移动到文本列名。


@TrentonMcKinney 请注意,根据 https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.plot.scatter.html 的说明,c 应该是一个列名。如果它是一个类似数组的对象,Pandas 将其视为颜色序列。我的 c 使用在非子图情况下运行良好,即可以轻松设置 x 轴标签。子图是导致问题的原因。 - Ahmed Fasih
不确定错误在哪里,但是你可以使用 matplotlib 代替 pandas(即将 foo.plot.scatter(x='a', y='b', ax=ax1, c='c') 替换为 ax1.scatter(x='a', y='b', c='c', data=foo) - ImportanceOfBeingErnest
这里有相同的问题 https://dev59.com/aa7la4cB1Zd3GeqPj9cR - Trenton McKinney
1个回答

4

x轴标签的可见性被设置为False,由于某种原因。要解决这个问题,您只需要执行以下操作:

fig, (ax1, ax2) = plt.subplots(nrows=2, sharex=True)
foo.plot.scatter(x='a', y='b', ax=ax1, c='c')
foo.plot.scatter(x='a', y='c', ax=ax2, c='c')
ax2.set_xlabel('xxx')
ax2.xaxis.get_label().set_visible(True)

这将为您提供:

在此输入图片描述


1
最后一步是让它显示xticklabels:ax2.tick_params(axis='x', bottom=True, labelbottom=True)。谢谢! - Ahmed Fasih

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