当sharex时,在pandas图中可以看到ticklabels

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当sharex时,在pandas图中可以看到ticklabels相关的知识,希望对你有一定的参考价值。

我想用共享的x轴制作一个子图的网格。绘图应该(出于某些方便的原因)通过访问Pandas DataFrame的绘图方法来完成。另外,我想让x-tick-labels显示在我网格的第一行。我尝试使用以下代码实现此目的:

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd


x = np.linspace(0,10,100)

nrows = 4
ncols = 3
fig, axes = plt.subplots(nrows, ncols, sharex=True)

for i, ax in enumerate(axes.reshape(-1)):
    y = np.cos(x+i*np.pi)
    df = pd.DataFrame(y, index=x)
    # ax.plot(x, y)                 # shows top labels
    df.plot(ax=ax, legend=None)     # doesn't show top labels

    if i < ncols:
        # first row: plot x-ticks + x-labels
        ax.tick_params(which='both', labeltop=True, top=True)
        # also none of these approaches works:
        # plt.setp(ax.get_xticklabels(), visible=True)
        # ax.xaxis.set_tick_params(which='both', labeltop=True, top=True, colors='g')
        # for label in ax.get_xticklabels():
        #     label.set_visible(True)

plt.show()

使用Matplotlib的原始绘图程序可以正常工作,但是当我使用Pandas方法时,ticklabels会保持隐藏状态。任何想法,为什么以及如何解决这个问题?

非常感谢提前, 马库斯

答案

您可以先创建当前正在执行的绘图,然后通过创建双轴为所需的子绘图或行/列设置滴答。

此示例另外根据需要为第一行设置x-ticklabels。你在plt.show()之前添加这些行。 i<3这里仅指第一行,因为这是按顺序访问子图的方式。 both指主要和次要蜱。由于您尚未显示次要刻度,因此您目前只能获得主要刻度。如果需要,您可以自定义if语句以将x-ticklabels添加到另一行。我不得不从你的代码中删除if i < ncols:命令以使其工作。


完整的工作代码

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import matplotlib
import sys

print (sys.version)
# 3.6.5 |Anaconda, Inc.|

print (matplotlib.__version__) 
# 2.2.2

print (pd.__version__)
# 0.23.0

x = np.linspace(0,10,100)

nrows = 4
ncols = 3
fig, axes = plt.subplots(nrows, ncols, sharex=True,figsize=(12,6))

for i, ax in enumerate(axes.reshape(-1)):
    y = np.cos(x+i*np.pi)
    df = pd.DataFrame(y, index=x)
    df.plot(ax=ax, legend=None)     # doesn't show top labels

    if i < 3:
        ax1 = ax.twiny()
        ax1.set_xlim(ax.get_xlim())
        ax1.tick_params(axis='x', which='both', bottom=False, top=True, labelbottom=False) 

plt.tight_layout()
plt.show()

enter image description here

以上是关于当sharex时,在pandas图中可以看到ticklabels的主要内容,如果未能解决你的问题,请参考以下文章

在 Seaborn histplot 子图中自定义图例

在 Pandas 图中仅隐藏轴标签,而不是整个轴

使用 Pandas 在同一图中绘制分组数据

text ShareX代码在服务器上上传裁剪的图像

ShareX 图片处理工具

Matplotlib sharex 上具有不同 x 值的数据?