Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当sharex时,使标签在熊猫图中可见_Python_Pandas_Matplotlib_Plot_Label - Fatal编程技术网

Python 当sharex时,使标签在熊猫图中可见

Python 当sharex时,使标签在熊猫图中可见,python,pandas,matplotlib,plot,label,Python,Pandas,Matplotlib,Plot,Label,我想用共享x轴的子地块制作一个网格。为了方便起见,应通过访问熊猫数据框的绘图方法进行绘图。此外,我希望在网格的第一行显示x-tick标签。我试图通过以下代码实现这一点: 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

我想用共享x轴的子地块制作一个网格。为了方便起见,应通过访问熊猫数据框的绘图方法进行绘图。此外,我希望在网格的第一行显示x-tick标签。我试图通过以下代码实现这一点:

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.pyplot作为plt
将numpy作为np导入
作为pd进口熊猫
x=np.linspace(0,10100)
nrows=4
ncols=3
图,轴=plt.子批次(nrows、NCOL、sharex=真)
对于i,枚举中的ax(轴整形(-1)):
y=np.cos(x+i*np.pi)
df=pd.DataFrame(y,index=x)
#ax.绘图(x,y)#显示顶部标签
df.plot(ax=ax,legend=None)#不显示顶部标签
如果i
使用Matplotlib中的原始绘图例程,但使用Pandas方法时,标签保持隐藏。 有什么想法吗?为什么以及如何解决这个问题

提前非常感谢,

Markus

您可以先按当前操作创建绘图,然后通过创建双轴来设置所需子地块或子地块行/列的刻度


此示例根据需要仅为第一行另外设置x-TickLabel。将这些行添加到
plt.show()
之前<代码>i是否只在第一行中使用x标签?还是第一排和最后一排?对不起,我应该说得更具体一点;我想把它们都放在最后一排和第一排。然而,第一行中的标签应该位于子批次的顶部。这很棘手。我只是花了一个小时在这个问题上,没有找到解决办法。一个类似的问题已经出现了,但没有任何令人满意的答案-不确定是否相关。@Markus:好的,我让它工作了。请看下面我编辑的答案,谢谢你的回答。您的建议确实适用于底部刻度/标签。但是,如果我想在第一行中显示上面的记号/标签(在最后一行中,它应该仍然显示底部的记号/标签),那么不知怎么的,它不起作用。它只显示不带标签的记号。还有,什么让我惊讶;仅当我在示例中的for循环之外调用此循环时,您的解决方案才有效。如果i<3:ax.tick_params(axis='x',which='both',bottom=True,top=False,labelbottom=True)
直接在for循环中调用语句
也不起作用。这里的解决方案对我来说不起作用,与我放置循环的位置无关。我用(MPL2.2.2,pd 0.20.1)和(mpl3.0.0,pd 0.23.4)进行了测试。@ImportanceOfBeingErnest:我用的是
'2.2.2'
0.23.0
。@Markus:是的,你必须在for循环之后和之外调用这个for循环。在jupyter和as脚本中运行这个时有区别吗?
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()